参考概念梳理

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路径即可

Alt text