zoukankan      html  css  js  c++  java
  • 让Visual Studio载入Symbol(pdb)文件

    让Visual Studio载入Symbol(pdb)文件

    Visual Studio载入Symbolpdb)文件

     

    在VC编译工程的编译连接阶段,会产生Symbol文件,也就是常说的 pdb 文件。pdb 的全称为 program database,在 MSDN 中的解释为,pdb 文件是一个在编译和链接阶段产生的,包含了类型和调试符号信息的二进制文件。pdb 文件中包含了各个函数的符号表,也是进行 WinDbg 调试必不可少的文件。

    既然 pdb 文件是给调试器使用的,那么 Visual Studio 调试器也就可以使用之。通过如下设置,Visual Studio 便可以在调试过程中加载 pdb 文件了。

    Tools --> Options --> Debugging

    在“Symbol file (.pdb) locations:”下面的控件中输入微软默认 pdb 文件的下载路径“http://msdl.microsoft.com/download/symbols”。

    在“Cache symbols from symbol servers to this directory:”下的编辑框中输入本地保存路径,如:D:/WinSymbols/MsDownSymbols。

    下面两个 CheckBox 的意思分别为:

    “Search the above locations only when symbols are loaded manually”。

    调试器仅仅载入手动载入的 Symbol。勾上此选项,调试速度会更快,但 pdb 载入相对较少,调试信息较少,建议不勾选。

    “Load symbols using the updated settings when the dialog is closed”

    对话框关闭后,立刻加载符号表。勾上此选项可以立刻看到效果,调试速度当然会稍微慢一点,建议勾选。

    点击 OK 关闭对话框,设置便生效了。

    如图所示:

    设置过了,当然要看看效果啦。

    我们先看看正常情况下 CallStack 的状态,建立一个普通 Win32 程序,在InitInstance入口下个断点,F5开启调试,在 CallStack 窗口如下显示: 

        我们可以看到,在最下面两行中,信息是灰掉的,kernel32.dll中那个函数调用了我们的wWinMainCRTStartup也看不到,进程最开始由哪个函数创建也看不到。

        现在看看设置了 Symbol 时 CallStack 的状态,建立一个普通 Win32 程序,在InitInstance入口下个断点,F5开启调试,在 CallStack 窗口如下显示: 

        我们可以看到,程序是由kernel32.dll中的导出函数“_BaseProcessStart”开始的,_BaseProcessStart调用了我们的wWinMainCRTStartup函数,然后程序就运行起来了。

    当然设置 Symbol 的用处远远不止这些,其余的就等您慢慢发现。

    注:设置 Symbol 之后,调试速度会慢下来,如果无需知道系统函数是如何调用的,建议调试时不设置 Symbol。 

  • 相关阅读:
    Android Binder机制中的异步回调
    VS加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS
    下班前码个2013总结吧
    android ListView 在初始化时多次调用getView()原因分析
    Android BindService中遇到的一个小问题
    C#读书笔记之并行任务
    Android系统启动分析(Init->Zygote->SystemServer->Home activity)
    浅析Java异常
    在Ubuntu-14.04.3配置并成功编译Android6_r1源码
    (转)Android Binder设计与实现 – 设计篇
  • 原文地址:https://www.cnblogs.com/zhehan54/p/7451368.html
Copyright © 2011-2022 走看看