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

Sim*_*ely 27 .net c# debugging visual-studio

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

其中的一些行标记为"外部代码".

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

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

Mat*_*ius 34

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

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

在此输入图像描述

一旦你扩展它,你会看到被调用的dll,你可以通过点击获得磁盘上的位置 Symbol Load Information...

在此输入图像描述

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

在此输入图像描述

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

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

有关获取.pdb文件的更多信息.

这是生成EF .pdb的实际示例

希望这能为您节省一些时间.


Tig*_*ran 13

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

当前写的是因为可以下载或设置符号信息.

有关详细信息,请参阅:如何:指定符号位置和加载行为

  • MSDN有关于["我的代码"]的更准确信息(https://msdn.microsoft.com/en-us/library/dn457346.aspx).C#和C++之间存在差异,并且存在可用的符号信息的代码,其仍被视为外部代码. (2认同)

mar*_*man 5

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

这就是 MSDN 文档中描述的方式如何:使用调用堆栈窗口

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

<[外部代码]>

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

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

此外,根据如何:单步执行我的代码,您可以拒绝调试器尝试跟踪非用户代码。

在这里,您将找到user code实际情况的解释:

为了区分用户代码和非用户代码,Just My Code 关注三件事:DBG 文件、PDB 文件和优化。