1

在 Visual Studio 中进行“调试”构建时,它会输出一个 pdb 文件,以便您在发生异常时获得详细信息。

pdb 文件中的信息是在运行可执行文件时实际加载还是在稍后发生异常时加载?

4

2 回答 2

1

IDA 等反编译器在分析可执行文件时加载符号文件,或者当您告诉它使用可执行文件加载特定符号时,只要它与当前正在调试的可执行文件匹配。

诸如 Visual Studio 调试器之类的调试器会在开始调试时立即加载 PDB 文件和符号,而不是在发生异常时加载。

PDB 文件上的 MSDN 页面进一步强调了这一点:

Visual Studio 调试器直接使用链接器创建的 project.PDB 文件,并将 PDB 的绝对路径嵌入到 EXE 或 DLL 文件中。如果调试器在该位置找不到 PDB 文件或路径无效(例如,如果项目已移动到另一台计算机),则调试器将搜索包含 EXE 的路径,即解决方案属性页中指定的符号路径 (公共属性文件夹,调试符号文件页面)。调试器不会加载与正在调试的二进制文件不匹配的 PDB。

当然,如果程序在没有/debug的情况下编译,PDB 文件的路径将不会包含在生成的 exe 或 DLL 中。

于 2013-07-11T21:09:28.270 回答
0

是的,它们是在 VS 之外加载的。如果您的代码在加载 PDB 时崩溃,您将看到源代码位置和行号。

于 2013-07-11T21:08:53.020 回答