2012-07-24 89 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

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