C++ VS2010 C++;不包括指向.pdb是根据dumpbin编译的.dll的路径

C++ VS2010 C++;不包括指向.pdb是根据dumpbin编译的.dll的路径,c++,visual-studio-2010,dll,pdb-files,C++,Visual Studio 2010,Dll,Pdb Files,Visual Studio按照我的要求将项目编译成DLL,但当我使用dumpbin检查这些DLL时,它们的PDB没有条目,这可能是我无法调试任何这些DLL的原因,如果我在运行时加载它们,并且从未加载它们的PDB。如何让VS写入这些路径 VisualStudio,C++ 编辑: C++/General/Debug信息格式设置为“Program Database(/Zi)”,链接器/Debug/Generate Debug信息设置为“Yes(/Debug)”,我认为这是正确的。dll中没有引用PD

Visual Studio按照我的要求将项目编译成DLL,但当我使用dumpbin检查这些DLL时,它们的PDB没有条目,这可能是我无法调试任何这些DLL的原因,如果我在运行时加载它们,并且从未加载它们的PDB。如何让VS写入这些路径

VisualStudio,C++ 编辑:


C++/General/Debug信息格式设置为“Program Database(/Zi)”,链接器/Debug/Generate Debug信息设置为“Yes(/Debug)”,我认为这是正确的。

dll中没有引用PDB,它们由Visual Studio搜索。如果它们在同一目录中,它应该可以找到它们。

您可以指示Visual Studio在何处查找符号。总之:

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

关于符号如何使用的更全面的概述如下


输出
窗口中应该有关于加载DLL时发生的情况的信息。可能它不是您期望的版本?

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

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

我试图将它们复制到同一个目录中,但无法加载。不过,这可能是另一个问题,即通过winbase::LoadLibrary()动态加载不会首先加载它们?如果您构建PDB,它的完整路径将嵌入到您构建的EXE/DLL中,除非您特意阻止它(例如,因为您不希望人们知道源代码的完整路径)。使用十六进制编辑器进行查看。:)C++/General/Debug信息格式设置为“Program Database(/Zi)”,链接器/Debug/Generate Debug信息设置为“Yes(/Debug)”。据我所知,这些是正确的值。我希望这是个问题,但遗憾的是,它不是生成的,所以PDB文件是生成的,你可以在DLL文件旁边找到它们。SimChk找不到它们,即使我指向PDB文件的确切路径(在做了一个普通的旧文件搜索之后,我自己确实找到它)。我用Visual Studio 2010 C++项目做了一些测试。一旦设置了linker/DEBUG选项,就会生成一个pdb文件,并将调试部分添加到引用pdb文件的dll中。在我看来,您正在使用的pdb似乎不是与编译dll的配置相关联的pdb。在我的情况下,由于没有将Linker/General/Output文件设置为默认值,所有内容都被抛出。一旦我修改了Linker/debug/Generate程序数据库文件,使其使用相同的宏值(加上“.pdb”扩展名),一切都像一个魔咒一样构建起来。