2012-01-18 1 views
1

Je reçois une erreur de violation d'accès dans une DLL non gérée que j'écris, mais lorsque j'essaie de la déboguer dans une application aC#, elle n'obtient que la dernière image de la pile d'appel dans le débogage de Visual Studio fenêtre.Pile d'appel non gérée dans l'application C#

J'ai debug-> exceptions-> System.AccessViolationException défini pour rompre le débogueur lorsqu'il est levé.

myunmanaged.dll!ViolatingFunc() Line 100 + 0xc bytes 
- - - - 
[external code] //myunmanaged.dll!function that I want to see 
- - - - 
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator(); 

J'espérais monter la pile non géré pour voir où les données se tourna vers garbeldegook. Est-ce possible?

Answered enter image description here

Activation du débogage non managé est l'étape 1, mais pour me faire tout le chemin là, j'ENABLED symboles Microsoft.

qui a fait ma trace de la pile ressemblent plus à ceci:

myunmanaged.dll!ViolatingFunc() 
- - - - 
myunmanaged.dll!SomeFunc2() 
- - - - 
myunmanaged.dll!SomeFunc() 
- - - - 
[managed to unmanaged code transition] 
- - - - 
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator(); 

Répondre

5

Oui, il est. Vous devez déboguer votre application en 'mode mixte'. Faites un clic droit sur le projet, sélectionnez l'onglet 'Debug' et cochez 'Activer le débogage de code non géré'. Vous verrez des cadres gérés et natifs.

mixed mode debugging

Modifier: Comme ChrisO mentionne ne pas avoir des symboles MS peut faire bizarre débogage natif. Ajoutez ce qui suit à votre chemin de symboles pour les symboles Windows:

+1

Et il est préférable de charger les symboles de débogage, à partir du serveur de symboles Microsoft, parfois les piles d'appels sont terribles jusqu'à ce que vous le fassiez. –

+0

@ChrisO C'est un bon point. Je vais ajouter cela à la réponse. – linuxuser27

+0

Est-ce la case à cocher "activer le débogage de code non géré"? Cela est déjà défini pour moi, je peux voir le cadre où le problème se produit, mais je ne peux pas voir ce qui s'est passé entre le dernier et le dernier appel géré –