2012-07-24 87 views
20

我在Visual Studio中調用了一個方法,並嘗試通過調用堆棧進行調試。調用堆棧中的「外部代碼」是什麼意思?

其中的一些行標記爲「外部代碼」。

這是什麼意思? .dll中的方法已被執行?

愚蠢的問題;但需要一個明確的答案。

+0

@AlvinWong:這不太對,我以前的代碼不在解決方案中。 Tigran說,我認爲這是缺乏符號信息的原因。 – 2012-07-24 10:57:09

+0

關於這個問題的好帖子:http://blogs.msdn.com/b/zainnab/archive/2010/10/24/show-external-code-vstipdebug0031.aspx – 2014-11-26 13:57:17

回答

12

這些行符號信息目前不可用於Visual Studio Debugger。換句話說,Debugger無法從執行的行中檢索代碼。

我寫目前因爲符號信息,可下載或安裝。

欲瞭解更多信息,你可以閱讀:How to: Specify Symbol Locations and Loading Behavior

+0

MSDN有更精確的信息,我的代碼「](https://msdn.microsoft.com/en-us/library/dn457346.aspx)。 C#和C++之間存在差異,並且存在符號信息的代碼仍然被認爲是外部代碼。 – m3tikn0b 2015-11-26 10:53:37

1

這些線不是你的當前已加載調試符號引用。

此代碼可能是CLR中的外部DLL或本機代碼的一部分。如果您知道它是哪個模塊,並且具有調試符號,則可以手動將它們加載到Visual Studio中。

0

您沒有代碼/符號的方法。像.NET框架或第三方程序集一樣。

0

您可以使用「調試」菜單上的「附加到進程」操作來調試宿主應用程序的運行實例。 (正在運行的進程具有調試符號.pdb文件)。

4

符號'外部代碼'是指所有不屬於'我的代碼'的東西。

是這樣的方式,可以在這裏How to: Use the Call Stack Window

在託管代碼MSDN文檔中描述,在默認情況下。 Call Stack窗口隱藏非用戶代碼的信息。 >出現以下符號而不是隱藏信息。

< [外部代碼]>

非用戶代碼是沒有任何代碼「我的代碼。」`

Your Code是你可能已經想到了一切你是你自己寫的。所以在這個定義中,屬於外部dll的所有內容在調用堆棧的跟蹤中都被省略了。

此外,根據How to: Step Into Just My Code你有拒絕的調試器嘗試跟蹤非用戶代碼的可能性。

在這裏,你會發現什麼user code實際上是解釋:

要區分非用戶代碼用戶代碼,僅我的代碼着眼於三個方面:DBG文件,PDB文件和優化。

24

[外部代碼]表示沒有可用於該dll的調試信息。

你可以做的是在Call Stack窗口中點擊鼠標右鍵。然後選擇Show External Code這將展開[外部代碼]並向您顯示正在調用的模塊。

enter image description here

一旦你得到它展開,你會看到DLL的被稱爲您可以通過點擊Symbol Load Information...

enter image description here

這將打開對話框,顯示在磁盤上的位置獲得磁盤上的位置

enter image description here

如果你想調試你需要得到.pdb文件的DLL和放置在同一文件夾中.dll

這些外部檔案,這應該讓你Load symbols(在上面Symbol Load Information截圖2菜單),並開始調試。

More on getting .pdb files here.

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

希望這可以節省一些時間。