VS2010 C++ 不包含 .pdb 的路径是我根据 dumpbin 编译的 .dlls

Posted

技术标签:

【中文标题】VS2010 C++ 不包含 .pdb 的路径是我根据 dumpbin 编译的 .dlls【英文标题】:VS2010 C++ does not include paths to .pdb is my compiled .dlls according to dumpbin 【发布时间】:2010-09-24 15:11:58 【问题描述】:

Visual Studio 按照我的意愿将项目编译成 dll,但是当我使用 dumpbin 检查这些 dll 时,它们的 pdb 没有条目,这可能是我无法调试任何这些 dll 的原因我在运行时加载它们,它们的 pdb 永远不会加载。如何让 VS 编写这些路径?

Visual Studio,C++。

编辑: C++/General/Debug Information 格式设置为“Program Database (/Zi)”,Linker/Debugging/Generate Debug Info 设置为“Yes (/DEBUG)”,我认为这是正确的。

【问题讨论】:

【参考方案1】:

如果dumpbin /headers 在调试目录中没有显示任何条目,可能是因为您没有在编译和链接时启用调试信息生成。您应该检查 C++/General/Debug Information formatLinker/Debugging/Generate Debug Info 选项。

如果设置了这些选项,您可以检查 Visual 输出目录中的 dll 和 pdb 是否匹配。使用 Windows 调试工具,您可以使用命令 symchk /v yourdll /s folder_containing_pdb 来验证调试器引擎是否可以找到 pdb。它将检查 dll 是否不包含调试信息,在这种情况下您缺少 Visual Studio 中的选项,或者 pdb 文件是否不完整。 您还可以通过命令!sym noisy 使用 Windbg。 See here for detailed instructions.

【讨论】:

C++/General/Debug Information 格式设置为“Program Database (/Zi)”,Linker/Debugging/Generate Debug Info 设置为“Yes (/DEBUG)”。据我所知,这些是正确的值。我希望这是问题所在,但遗憾的是,事实并非如此。 这样pdb文件就生成了,你可以在dll文件旁边找到吗? symchk 无法找到它们,即使我将它指向 pdb 文件的确切路径(在执行普通旧文件搜索后自己实际找到它)。 我用 Visual Studio 2010 C++ 项目做了一些测试。一旦设置了链接器 /DEBUG 选项,就会生成一个 pdb 文件,并将一个调试部分添加到引用 pdb 文件的 dll 中。对我来说,您所看到的 pdb 似乎与编译 dll 的配置无关。 在我的情况下,由于没有将 Linker/General/Output File 设置为默认值,一切都被抛弃了。一旦我修改了 Linker/Debugging/Generate Program Database File 以使用相同的宏值(加上“.pdb”扩展名),一切都像魅力一样构建。【参考方案2】:

在 dll 中没有引用 pdb,它们会被 Visual Studio 搜索。如果它们在同一个目录中,它应该会找到它们。

【讨论】:

我试图将它们复制到同一个目录中,但它们不会被加载。不过,这可能是一个不同的问题,通过 winbase::LoadLibrary() 的动态加载不会首先加载它们? 如果您构建一个 PDB,它的完整路径将嵌入到您构建的 EXE/DLL 中,除非您竭尽全力阻止它(例如,因为您不希望人们知道完整路径到您的源代码)。用十六进制编辑器看看。 :)【参考方案3】:

您可以根据 this article 指导 Visual Studio 在哪里查找符号。总结:

单击文件上的符号文件路径 菜单以显示、设置或附加到 符号路径。

关于如何使用符号的更全面的概述是here。

Output 窗口中应该有关于加载 DLL 时发生的情况的信息。可能不是你期待的版本?

【讨论】:

以上是关于VS2010 C++ 不包含 .pdb 的路径是我根据 dumpbin 编译的 .dlls的主要内容,如果未能解决你的问题,请参考以下文章

VS Studio 2010 Symbol Server 不包含源代码

VS2010环境下C++工程相关问题汇总

在 VS C++ 中使用 dll、pdb 文件和源代码进行调试

vs 2010 Cannot find or open the PDB file

VSPerf VS2010 和其他分析工具没有拾取 pdb

vs2010 相对路径中附加包含目录 不好用,请帮忙看看