.NET应用程序调试—原理、工具、方法(7)
此时我们就成功的获取到了dump文件。
通过调试器获取dump文件比较稳定可靠,因为机器运行环境的不同,通过任务管理器获取的dump文件会存在一些无法预知的问题,你并不清楚,当前任务管理器是使用哪个版本的环境输出调试信息的。
有了dump文件之后就是通过调试工具打开就行了,WinDbg就有一个菜单专门打开dump文件的,Open Crash Dump。使用ntsd需要使用命令ntsd -z d:\order.dmp。
5.一般调试步骤
知道了调试的一些原理和工具之后我们来看一下调试的基本步骤,这些步骤都具体是指的什么意思,有哪些好处。
5.1.设置符号文件(公有符号、私有符号)
设置符号文件的目的是为了能够在调试器中正确的对应到源代码的位置和一些元数据信息。符号文件都是*.pdb文件名。符号文件分为公有和私有两种,公有的都是公司公开出去用于帮助调试用的,而私有的是公司内部使用的,为什么要区分公有和私有,是为了防止逆向工程。
图17:(设置符号文件路径)
首先通过.sympath d:,设置了符号路径为D盘,然后又使用.symfix+ d:,是设置私有符号路径,并且使用d盘为缓存路径。在最后一个红线中我们能看出来。
为什么使用.symfix 时要带上一个+号,其实是告诉调试器我们是多加一个符号位置,而不是覆盖原有符号位置。
设置好了两个符号位置后需要使用.reload命令来重新加载模块,这样调试器才会去符号位置去加载这些符号。
图18:(加载的符号文件)
调试器会自动的将公有符号下载到你刚才设置的缓存目录中。
5.2.加载.NET程序扩展调试包(SOS.DLL、SOSEX.DLL)
对.NET程序分析当然是需要加载SOS扩展了。加载SOS扩展有两个命令可以使用,第一个是.load C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll,.load命令是要给出sos.dll绝对路径的。第二个是.loadby sos modulename,.loadby 命令是可以根据已经加载的模块名称来加载SOS.dll扩展。使用第一个命令有一个问题就是,我们需要人工的判断当前环境到底是需要什么版本的SOS扩展,而使用.loadby是可以根据已经加载的模块来自动的查找对应的SOS扩展。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>