首先,彻底的release版本(VC默认)是无法进行源代码级别的调试的,即使从别的地方把pdb文件拷贝过来也没用。
如果想要进行源代码级别的调试,在生成release版本(dll, exe, ocx)时就要把一些调试信息build到dll/exe/ocx中,并让编译程序生成对应的pdb文件来保存详细的调试信息,有了这样的exe/dll及pdb、源文件,就可以进行调试了。具体的步骤如下:
1、 控制编译过程。VC->Project Settings-> C/C++ tab, General Category, Debug Info combo box, select Program Database. This setting will add the /Zi switch to your compiles. 不要选择 Program Database For Edit And Continue (/ZI),一般用不到。另外/Z7选项也可以,它跟/Zi的区别是/Z7 生成CodeView格式的调试信息,保存在obj文件中;/Zi 生成程序数据库格式的调试信息,保存在.PDB文件中。
2、 控制链接过程。VC->Project Settings->Link tab, General Category, check Generate Debug Info. This setting turns on the /DEBUG switch to the linker. 作为可选项也可以在链接选项中键入/OPT:REF,这个选项告诉链接器不要为那些没有被调用的函数生成调试信息.但是实际上这个选项是不必要的,因为对于dll来说我们链接时无法知道哪些会被调用.另外即使不加这个选项无非也就是使得编译出来的exe/dll大一点而已,一般来说不是问题.
有了调试信息,release版本跟debug版本的区别主要在于有没有进行优化.可能由于优化,release版本调试时源代码对不上当前执行状态,但是总比没有调试强.对于一个商业应用来说,尤其是客户那边出了问题就需要到客户那边调试的情况,特别需要release版本也带有调试信息.为了调试方便付出的代价就是生成的exe/dll比较大,这个代价是值得的.需要调试,把pdb文件和源代码拷贝带着就可以上路了.