标签:
1.debug模式:即直接从调试器里面启动程序,或按F5
2.验尸(post-mortem)调试:当你的程序发布给客户以后,客户在使用程序的过程中,可能会碰到一些很难重现的错误(bug)。(包的crash)
这时操作系统可以将出错的程序的内存保存到一个文件(二进制文件)里面,然后你可以在自己的开发机上调试这个文件(找到这个二进制文件对应的PDB,然后找出相应的源码),找到程序错误的原因。
符号文件:将工程所有源码与源码编译后的所有二进制机器码对应起来,保存着它们的映射关系。
调试符号文件为调试器提供了从二进制机器代码地址到源代码文本文件代码行的映射.
通过pdb,就可以找到某行二进制对应的源码的位置,二进制内存对应的源码里变量的位置。
符号文件将代码行号信息和保存在被调试器里面的机器指令对应起来。
project a === a.pdb(里边保存着工程所有源码与对应的二进制码的关系)
你在调试器里面设置断点的时候,调试器会在程序的指令流里面插入这个特殊指令。而CPU在执行程序的指令时,如果碰到这个指令,就会自动中断程序的执行,并且将程序的控制权交给调试器,这样你才能通过调试器查看程序里边一些变量的值,以及对程序做一些其他操作。
但问题是,在你设置断点的时候,你只是告诉了调试器要中断执行的代码行,即你只是在源代码文件的某一行点了一下。而通常一行C或者C#代码在编译之后,会被解释成多条机器指令,调试器是怎样将代码行号信息和保存在被调试器里面的机器指令对应起来的呢?
符号文件的作用:
程序员通过符号文件来找到调试过程中的断点的二进制行号,对应变量的值啊。
如果你是调试模式的话,它就直接中断。
如果你是验尸(post-mortem)调试,也就是你的程序已经全是二进制没有源码了,如果程序crash了,崩了,程序就会发送错误报告,告诉你崩的二进制代码的位
置,如果你有这个工程对应的pdb,就可以通过pdb来找到崩的源码的代码行。
符号文件服务器的工作就是,当你在调试程序的时候,调试器会自动和符号文件服务器交互,获取正确版本的符号文件。
原理:
符号服务器上:
版本1.pdb;版本2.pdb
调试器运行某个版本的工程,vs
http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html
标签:
原文地址:http://www.cnblogs.com/yiii/p/5176622.html