在Visual Studio中执行“调试”构建时,它会输出一个pdb文件,以便在发生异常时获取详细信息。
pdb文件中的信息是在运行可执行文件时实际加载的,还是在异常发生时实际加载的?
答案 0 :(得分:1)
IDA等分解程序在分析您的可执行文件时加载符号文件,或者当您告诉它使用您的可执行文件加载特定符号时,只要它与当前正在调试的可执行文件匹配。
调试器(如Visual Studio调试器)一旦开始调试就会加载PDB文件和符号,而不是在发生异常时加载。
The MSDN page on PDB files进一步强调了这一点:
Visual Studio调试器使用由。创建的project.PDB文件 直接链接并将EXE中的PDB的绝对路径嵌入 DLL文件。如果调试器无法在该位置找到PDB文件或 如果路径无效(例如,如果项目已移至 另一台计算机),调试器搜索包含EXE的路径, 解决方案的属性页中指定的符号路径(通用 属性文件夹,Debug Symbol Files页面)。调试器不会 加载与正在调试的二进制文件不匹配的PDB。
当然,如果没有 / debug 编译程序,PDB文件的路径将不会包含在生成的exe或DLL中。
答案 1 :(得分:0)
是的,它们是在VS之外加载的。如果您的代码在加载PDB时崩溃,您将看到源代码位置和行号。