【问题标题】:What does "external code" in the call stack mean?调用堆栈中的“外部代码”是什么意思?
【发布时间】:2012-07-24 10:53:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • @AlvinWong:这不太对,我之前的解决方案中没有可用于调试的代码。我认为这是 Tigran 所说的缺乏符号信息。
  • "如果未启用仅我的代码,则快捷菜单上没有[显示外部代码],系统代码为默认显示。”
  • "显示外部代码设置保存到当前用户的分析器。它应用于用户打开的所有语言的所有项目。"

标签: c# .net visual-studio debugging


【解决方案1】:

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

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

一旦你展开它,你会看到正在调用的 dll,你可以通过点击 Symbol Load Information... 来获取磁盘上的位置

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

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

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

More on getting .pdb files here.

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

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

【讨论】:

  • 我必须从 VS2017 中的 Modules 调试窗口加载符号(安装了 ReSharper); 调用堆栈快捷菜单上没有符号加载信息和相关命令。
【解决方案2】:

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

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

有关更多信息,您可以阅读:How to: Specify Symbol Locations and Loading Behavior

【讨论】:

  • MSDN 提供有关 "My Code" 的更准确信息。 C# 和 C++ 之间存在差异,并且有可用符号信息的代码仍然被视为外部代码。
  • I 符号已经加载,您只需要允许显示外部代码。下面的答案显示了stackoverflow.com/a/31044557/6655465
【解决方案3】:

“外部代码”表示法指的是不属于“我的代码”的所有内容。

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2018-02-03
          • 2011-05-09
          • 1970-01-01
          • 2023-03-09
          • 1970-01-01
          • 2011-05-30
          • 1970-01-01
          • 2010-09-07
          相关资源
          最近更新 更多