代码改变世界

如何利用.pdb文件去调试

2010-04-20 16:35  yuxiong  阅读(4580)  评论(0编辑  收藏  举报

问题需求:

1.需要去调试一个exe,查看内部执行的过程,但是该exe的源代码是孤立的,利用make文件组织进行编译.每天会给出编译包。

 

问题的分析:

考虑1. 新建一个VS的工程,然后手动添加这些文件,然后编译调试。

考虑2. 既然有make文件,那么之前是否有编译成功的版本,该版本是否保存了调试的符号文件?

针对方案1:手动添加得考虑一下该工程的依赖关系,是否涉及太多的模块,否则将问题更加复杂化就不好了,我的需求中提到我的这个工程牵制的模块非常多,所以这个方案我肯定要放弃的。

针对方案2:我可以获取到每日编译包,打开找了一个,找到了该 *.exe,而且Symbol Files统一放到一个文件下管理,那么我没有理由不用第二种方案.

 

背景知识:

方案2肯定会用到的知识有符号文件,所以先大致说一下符号文件(Symbol Files)的定义.

符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。所以调试应用程序时,这个文件是非常重要的。用 Visual C++ 和 WinDbg 调试程序时都要用到这个文件。

 

解决方案;

1.新建一个 Visual C++ Win32 Console Application project.

这个控制台的程序只是一个用来进行调试的宿主程序,所以可以任意的创建,在这里我创建一个默认的Win32 Console Application.

 

2.选择工程的属性,在Debugging标签下,设置以下几个信息:

  1. Command: C:\Test\Sample.exe;
  2. Command Arguments: test1  test2 (that depends on what you want to debug);
  3. Working Directory: C:\Test;

3.In VS, Tools -> Options -> Debugging -> Symbols, 然后指定Symbol file(.pdb) ,将该路径填入即可。

 

4.打开Sample.exe的源代码文件,将调试中需要用到的文件打开并设置断点,F5即可调试.

 

总结:

碰到这个问题的时候,我第一反应就是用第一种方案,但是花费很长时间之后还是问题重重之后,我就看是意识到可能这并不是很好的办法,通过分析和研究,选择第二种方案,不到10分钟就可以解决这个问题。

碰到问题一定要先分析一下已有的资源,然后再进行方案的选择。