43

我在 Visual Studio 中调用一个方法,并尝试通过调用堆栈对其进行调试。

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

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

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

4

6 回答 6

62

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

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

在此处输入图像描述

展开后,您将看到正在调用的 dll,您可以通过单击获取磁盘上的位置Symbol Load Information...

在此处输入图像描述

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

在此处输入图像描述

如果您想调试这些外部文件,您需要获取.pdbdll 的文件并放在与.dll

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

更多关于在此处获取 .pdb 文件的信息。

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

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

于 2015-06-25T08:02:40.393 回答
16

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

我现在写是因为可以下载或设置符号信息。

有关更多信息,您可以阅读:如何:指定符号位置和加载行为

于 2012-07-24T10:56:15.097 回答
5

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

这就是这里的 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 文件和优化。

于 2012-07-24T11:03:57.827 回答
1

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

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

于 2012-07-24T10:57:51.730 回答
0

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

于 2012-07-24T11:00:23.613 回答
0

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

于 2012-07-24T10:58:22.143 回答