Dump Analysis Intro
参考概念梳理
Symbol basics
- 什么是符号文件?对于 Microsoft 编译器,这些是作为构建的一部分生成的 .pdb 文件
- 符号 (.pdb) 文件中有什么内容?它们记录了编译器如何将源代码转换为处理器执行的机器代码
- 为什么我需要符号?如果没有符号,工具就无法将应用程序中执行的指令与原始源代码关联起来。
- 调试时,如果没有符号文件,则无法在特定代码行上设置断点。如果未加载符号,则在调试模式下您将看到一个带有警告符号的空心圆圈,如果将鼠标悬停在其上,工具提示将告诉您不会命中断点,因为尚未加载任何符号。
- 如果您正在调试dump file需要符号路径上相应的二进制文件和符号文件。
Visual Studio’s default behavior
vs下将二进制文件
称为模块
- 加载模块时,Visual Studio 将尝试加载进程中所有模块的符号。
- 勾选
Microsoft 公共符号服务器
假设在您的本地计算机上找不到该符号,它会自动尝试从 Microsoft 公共符号服务器获取它们 - 符号文件与其相应的模块位于同一文件夹中。Visual Studio 项目的默认生成输出设置将输出二进制文件旁边的符号。
How can I tell if a symbol is loaded and if not why?
调用堆栈窗口中将出现一条消息,指出符号未加载,调试器可以告诉您为什么它没有加载符号以及在哪里搜索它们。
Configuring Visual Studio’s settings
- Symbol file locations主要指定哪放pdb
- Symbol cache 符号缓存是本地计算机上的位置,Visual Studio 将在远程位置找到的符号副本放置在该位置以供将来使用。假设您提供符号缓存的路径,Visual Studio 将在尝试在上面指定的任何符号文件位置查找符号之前搜索缓存。
- Automatic Symbol Loading
Visual Studio offers two modes of automatic symbol loading
- 加载所有模块的符号
- 加载指定模块的符号
Deep dive on manual symbol loading
优先考虑加载指定模块的符号
- 调试非常大的应用程序时,您可以根据需要加载符号
- 不必等待符号加载以获取正在调试的进程中的所有内容
总结
如图设置好pdb路径即可