【发布时间】:2013-07-11 21:03:05
【问题描述】:
在 Visual Studio 中进行“调试”构建时,它会输出一个 pdb 文件,以便在发生异常时获得详细信息。
pdb文件中的信息是在运行可执行文件时实际加载的,还是稍后在异常发生时加载的?
【问题讨论】:
-
很多人也为发布版本构建 .pdb 文件。
标签: c# c++ visual-studio
在 Visual Studio 中进行“调试”构建时,它会输出一个 pdb 文件,以便在发生异常时获得详细信息。
pdb文件中的信息是在运行可执行文件时实际加载的,还是稍后在异常发生时加载的?
【问题讨论】:
标签: c# c++ visual-studio
IDA 等反编译器在分析您的可执行文件时加载符号文件,或者当您告诉它使用可执行文件加载特定符号时,只要它与当前正在调试的可执行文件匹配。
Visual Studio 调试器等调试器会在开始调试时立即加载 PDB 文件和符号,而不是在发生异常时加载。
The MSDN page on PDB files 进一步强调了这一点:
Visual Studio 调试器使用由 链接器直接将 PDB 的绝对路径嵌入到 EXE 中或 DLL 文件。如果调试器在该位置找不到 PDB 文件,或者 如果路径无效(例如,如果项目被移动到 另一台计算机),调试器搜索包含 EXE 的路径, 在解决方案的属性页中指定的符号路径(常见 属性文件夹,调试符号文件页面)。调试器不会 加载与正在调试的二进制文件不匹配的 PDB。
当然,如果程序是在没有/debug的情况下编译的,PDB文件的路径将不会包含在生成的exe或DLL中。
【讨论】:
是的,它们是在 VS 之外加载的。如果您的代码在加载 PDB 时崩溃,您将看到源代码位置和行号。
【讨论】: