繁体   English   中英

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

[英]What does “external code” in the call stack mean?

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

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

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

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

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

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

这应该允许您Load symbolsSymbol Load Information上方的屏幕截图2中的菜单)并开始调试。

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

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

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

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

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

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

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

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

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

<[外部代码]>

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM