调用堆栈中的“外部代码”是什么意思?

时间:2012-07-24 10:53:48

标签: c# .net visual-studio debugging

我在Visual Studio中调用一个方法,并尝试通过调用堆栈来调试它。

其中的一些行标记为“外部代码”。

这究竟是什么意思?来自.dll的方法已被执行?

愚蠢的问题;但需要一个确定的答案。

6 个答案:

答案 0 :(得分:32)

[外部代码]表示该dll没有可用的调试信息。

您可以在Call Stack窗口中单击鼠标右键。然后选择Show External Code这将展开[外部代码]并显示正在调用的模块。

enter image description here

一旦你扩展它,你会看到被调用的dll,你可以点击Symbol Load Information...

获取磁盘上的位置

enter image description here

这将打开显示磁盘上位置的对话框

enter image description here

如果要调试这些外部文件,则需要获取dll的.pdb个文件,并将其放在与.dll相同的文件夹中

这应该允许你Load symbols(屏幕截图2 Symbol Load Information上方的菜单)并开始调试。

More on getting .pdb files here.

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

希望这可以节省你一些时间。

答案 1 :(得分:13)

这些是符号信息当前不适用于Visual Studio Debugger的行。换句话说,Debugger无法从执行的行中检索代码。

我写了目前,因为可以下载或设置符号信息。

有关详细信息,请参阅:How to: Specify Symbol Locations and Loading Behavior

答案 2 :(得分:4)

“外部代码”符号表示不属于“我的代码”的所有内容。

这就是MSDN文档How to: Use the Call Stack Window

中描述的方式
  

在托管代码中,默认情况下。 “调用堆栈”窗口隐藏非用户代码的信息。 >出现以下符号而不是隐藏信息。

     

< [外部代码]>

     

非用户代码是任何不是“我的代码”的代码。“

Your Code就像你可能认为你自己写的一切一样。因此,使用此定义,在调用堆栈的跟踪中省略了属于外部dll的所有内容。

此外,根据How to: Step Into Just My Code,您可以拒绝调试器尝试跟踪非用户代码。

在这里,您将找到user code实际上是什么的解释:

  

为区分用户代码和非用户代码,Just My Code会查看三件事:DBG文件,PDB文件和优化。

答案 3 :(得分:2)

您当前加载的调试符号未引用这些行。

此代码可能是外部DLL的一部分,也可能是CLR内部的本机代码。如果您知道它是哪个模块,并为它们提供调试符号,则可以手动将它们加载到Visual Studio中。

答案 4 :(得分:0)

您没有代码/符号的方法。与.NET框架或第三方程序集一样。

答案 5 :(得分:0)

您可以使用“调试”菜单上的“附加到处理”操作来调试主机应用程序的运行实例。 (运行进程有调试符号.pdb文件)。