- 1、本文档共36页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WinDBG调试技巧 Leo Jiang JiangFengbing@ 什么是WinDBG Debugging Tools for Windows简称为WinDBG 根据CPU指令架构的不同分为: x86版 下载 AMD64版 下载 IA64版 下载 WinDBG可以调试什么? 调试应用程序 调试驱动 分析dump WinDBG VS VC自带调试器 WinDBG利用自带的符号检查下载工具,可以获包含VC自带的符号文件外,系统大部分DLL或EXE的符号文件,调试粒度更小。而VC除了自带的符号文件,和自身产生的符号文件外,只能使用DLL导出的函数作为符号。 WinDBG可以调试驱动;VC不能,只能作为普通的应用程序调试器 WinDBG和VC都支持远程调试 WinDBG和VC调试器的关系 相同的核心dbghelp.dll+dbgeng.dll 不同的IDE 只是VC没有把核心所有的功能都开放出来 WinDBG加载符号 File - Symbol File Path; 或者 Ctrl + S; 或者命令行 两种符号格式 srv*\\jiangfengbing\symbols$*/download/symbols 表示从\\jiangfengbing\symbols$这个可写共享去加载pdb,如果pdb不存在则从/download/symbols/这个地方下载,加到\\jiangfengbing\symbols$,同时加载进调试器 ; 表示;后面还有一个符号信息 D:\work\code\kis\trunk\product\win32d 表示要加载D:\work\code\kis\trunk\product\win32d目录里面的pdb文件 让VC获得同样的符号加载功能 把WinDBG安装目录下的symsrv.dll拷贝到VC的IDE目录,类似于D:\DevTools\Microsoft Visual Studio 8\Common7\IDE\,VC2005默认是有这个文件的,但版本已老 启动VC,打开Tools - Options中设置(每个版本的VC设置有所不同) 用WinDBG保存dump 发现程序运行异常,又不能立刻确定原因,又怕调试后找不到原因,且现象不能重现。这个时候需要保存现场。 打开WinDBG,按F6 attach到目标进程,然后.dump /ma C:\dump\xxx.dmp 不要直接退出WinDBG,先detach在退出WinDBG,否则目标进程会被关闭 对测试来说,这个功能很有效。 dump不是崩溃的时候才能产生,而是随时可以产生,只要你会用WinDBG 使用WinDBG分析dump KIS2008在编译的时候都保存了pdb文件,而且加入了异常模块生产dump,所以分析dump变成了程序员的基本要求 没有技巧,只有流程 加载崩溃程序的pdb(要版本相符),加载系统模块的pdb,符号越全越好;符号不全,可能导致你看到的stack是错误的 如何看加载了哪些symbol,使用命令lm,WinDBG会把该进程的module都显示出来,如果有symbol,后面会显示symbols字样 对于应用崩溃(包括应用程序和驱动)产生的dump,在加载完符号后,可以让WinDBG自动分析分析,执行命令!analyze -v即可。 对于手工尝试的dump,一般current thread不是出问题的thread,所以要看所有的线程,执行命令~*kb,显示所以的线程的call stack。 大部分问题,只要看一眼就出来了。设置好源代码的路径,甚至可以找到出问题的一行。 其他所要使用到的技巧后面再详细阐述。 注意 用户通过键盘触发的minidump是没有分析意义的。 调试,分析就是找联系;符号,代码,等都是联系的桥梁,如果没pdb,怎么办?那image(目标dll或者exe)就是你的主要桥梁了,IDA将是你手中的另一个利器。 主动调试应用程序 打开WinDbg,Ctrl+E,打开想要调试的EXE 打开WinDBG,F6,attach到要调试的进程 *设置symbol加载路径,设置源代码目录,使用WinDBG就和VC一样,包括快捷键 *优点:如果你在测试的机器上调试问题,装VC根本不现实,而安装WinDBG则很容易,体积小,你只要把你开发机器上的符号,源代码共享,就可以利用这个体积轻量级的工具实现功能非轻量级的调试了。 被动调试 一般用来调试服务。因为我们没法由我们的调试器去加载服务进程。服务进程只能由service.exe去创建。 因此我们希望目标一启动,我们的调试器就attach上去了。 WinDBG自动的工具Global Flags可以帮我们的忙 当然也可以使用VC的即时调试器 大部分服务是不和桌面交互的,所以在WinXP下面
文档评论(0)