2012-07-24 14 views
20

Ich rufe eine Methode in Visual Studio auf und versuche, sie zu debuggen, indem ich den Aufrufstapel überspringe.Was bedeutet "externer Code" im Call-Stack?

Einige der darin enthaltenen Zeilen sind mit "External code" gekennzeichnet.

Was genau bedeutet das? Methoden aus einer DLL wurden ausgeführt?

Dumme Frage; aber brauchen eine definitive Antwort.

+0

@AlvinWong: Das ist nicht ganz richtig, ich hatte Code nicht in der Lösung avaialble zum Debuggen bevor. Ich denke, es ist der Mangel an Symbolinformationen, wie Tigran sagt. –

+0

Netter Beitrag zu der Angelegenheit: http://blogs.msdn.com/b/zainnab/archive/2010/10/24/show-external-code-vstipdebug0031.aspx –

Antwort

12

Dies sind die Linien, in denen Symbolinformationen derzeit nicht verfügbar ist für Visual Studio Debugger. Mit anderen Worten, Debugger ist nicht in der Lage, Code aus der ausgeführten Zeile abzurufen.

Ich schrieb derzeit, weil die Symbolinformationen heruntergeladen oder eingerichtet werden können.

Für weitere Informationen können Sie diese Zeilen lesen: How to: Specify Symbol Locations and Loading Behavior

+0

MSDN hat genauere Informationen darüber, was in Betracht gezogen wird [" Mein Code "] (https://msdn.microsoft.com/en-us/library/dn457346.aspx). Es gibt Unterschiede zwischen C# und C++ und es gibt Code mit Symbolinformationen, der immer noch als externer Code gilt. – m3tikn0b

1

Diese Linien sind nicht durch die Debug-Symbole verwiesen, die Sie gerade geladen haben.

Dieser Code kann Teil einer externen DLL oder eines systemeigenen Codes in der CLR sein. Wenn Sie wissen, welches Modul es ist, und Debug-Symbole für sie haben, können Sie sie manuell in Visual Studio laden.

0

Methoden, für die Sie keine Codes/Symbole haben. Wie .NET Framework oder 3rd Party Assemblies.

0

Sie können die Aktion An den Prozess anhängen im Debug-Menü verwenden, um die laufende Instanz Ihrer Host-App zu debuggen. (Der laufende Prozess enthält die Debugsymbol-PDB-Dateien).

4

Die Notation 'Externer Code' bezieht sich auf alles, was nicht zu 'Mein Code' gehört.

Das ist die Art und Weise ist es hier in der MSDN-Dokumentation beschrieben wird How to: Use the Call Stack Window

In verwalteten Code, standardmäßig aktiviert. Das Fenster "Anrufliste" blendet Informationen für Nicht-Benutzercode aus. > Die folgende Notation erscheint anstelle der ausgeblendeten Information.

< [Externer Code]>

Nichtbenutzercode ist jeder Code, der nicht "Mein Code". `

Your Code ist, wie Sie alles gedacht haben, können Sie auf eigene Faust geschrieben hat . Mit dieser Definition wird also alles, was zu externen DLLs gehört, in der Spur des Aufruf-Stacks weggelassen.

Darüber hinaus haben Sie die Möglichkeit, dem Debugger nach How to: Step Into Just My Code zu verweigern, um Nichtbenutzercode zu verfolgen.

Hier finden Sie die Erklärung finden für das, was user code eigentlich ist:

Um Benutzercode von Nicht-Benutzer-Code zu unterscheiden, nur sieht My-Code auf drei Dinge: DBG-Dateien, PDB-Dateien und Optimierung.

24

[Externer Code] bedeutet, dass für diese DLL keine Debuginformationen verfügbar sind.

Was Sie tun können, ist in Call Stack Fenster klicken Sie mit der rechten Maustaste. Wählen Sie dann Show External Code, dies erweitert [Externer Code] und zeigt Ihnen Module, die aufgerufen werden.

enter image description here

sobald man es erweitert werden Sie dll sehen, dass Sie Orte auf der Festplatte aufgerufen werden, indem Sie auf Symbol Load Information...

enter image description here

Dies öffnet Dialog erhalten können, die Positionen auf der Platte zeigt

enter image description here

Wenn Sie diese externen Dateien Sie .pdb Dateien für DLL und in demselben Ordner wie .dll

dies sollte erhalten müssen debuggen können Sie Load symbols (Menü in Bild 2 oben Symbol Load Information) und Debuggen starten.

More on getting .pdb files here.

And here's an actual example of EF .pdb being generated

Hope this Sie einige Zeit spart.