【问题标题】:PDB Files won't load for some projects某些项目不会加载 PDB 文件
【发布时间】:2012-03-27 22:24:30
【问题描述】:

我有一个项目在其他 dll 中多次引用我自己的代码。当我运行网站时,其中一个 dll 会加载其 pdb 文件,而另一个则不会。

从输出中我看到:

LOTS_OF_TEXT\Shared.BusinessLayer.DLL'
LOTS_OF_TEXT\Shared.Visual.Utilities.DLL',已加载符号。

我仔细检查过,它们在“LOTS_OF_TEXT”位置都有相应的 pdb 文件……但其中一个加载了符号(并允许调试),而另一个没有。

为什么?如何让 Shared.BusinessLayer.DLL 加载符号以便调试它?

编辑
作为参考,我让 Belvedere 在 pdb 文件更改时将它们复制到 /AppData/Local/Temp/SymbolCache...这是我的调试设置告诉 Visual Studio 查找符号的地方。

【问题讨论】:

  • 顺便说一句...Belvedere 是什么?谷歌上的“Belvedere C#”没有任何用处。
  • 复制 .pdbs 通常是个坏主意。将它们留在生成它们的位置,可执行文件存储原始路径。 Debug + Windows + Modules,右键单击模块并选择“符号加载信息”以查看调试器在哪里查找 pdb。
  • 在您当前的构建配置中,是否为调试设置了特定项目?
  • @RitchMelton : Belvedere 是一个免费实用程序,用于根据规则管理文件。
  • @HansPassant :当我查看模块时,我看到的是“PDB 与图像不匹配”......但我不知道为什么。该项目已设置为调试。

标签: c# debugging pdb


【解决方案1】:

启动 vsvars cmd 提示符(或 powershell)并浏览到 LOTS_OF_TEXT 文件夹。 Visual Studio 附带一个名为“dumpbin.exe”的工具,可让您检查 .dll 或 .exe 的结构。要查找调试符号,请在 cmd 提示符下键入 dumpbin /headers Shared.BusinessLayer.DLL 运行 dumpin,您应该会在 dll if 的标头信息中看到符号路径,它实际上是用符号构建的。只要符号在那里,或者在搜索路径上,就应该加载它们。

话虽如此,通过转到工具->选项->调试->符号并确保在“所有模块”上设置“自动加载符号:”单选按钮来检查 Visual Studio 是否设置为加载所有符号,除非排除”并且排除列表不包含任何相关图像。

【讨论】:

  • “在那个 dll 上运行 dumpin /headers”是什么意思?
  • @James - dumpbin.exe 是 Visual Studio 附带的工具,可让您查看 .dll 和 .exe 图像的各个方面。如果您的 dll 包含符号,则这些符号的路径将写入图像的标题中。
  • 谢谢 - 在我的例子中,一个引用的 .exe 文件找到了“排除列表”
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多