分享
 
 
 

Windows应用程序调试策略(一)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Windows应用程序调试策略(一)

简介

本文将介绍如何利用Windows下的调试工具(Windbg,NTSD,DrWatson..)结合Symbol文件在Win2K,WinXP等环境下调试VC++ User-Mode应用程序.

关键字

应用程序调试,WinDbg,Symbol,User-Mode,Kernel-Mode

目录

1.Windows环境下的调试工具;

2.Symbol Files(符号文件);

3.WinDbg的使用;

4.NTSD的使用;

5.DrWatson的使用;

6.Windows Services的调试;

7.WinDbg进阶.

Windows环境下的应用程序调试工具;

a.CDB和NTSD

CDB和NTSD是控制台程序,用来调试应用程序,两者在界面形式,支持的命令,使用方使上差别不大,CDB可以在调试工具包(Debugging Tools for Windows package)中得到,NTSD是Windows自带的,你可以在Windows System32目录下找到它.

b.WinDbg

WinDbg是一个强大的基于Windows界面的调试工具,它可以用来调试应用程序(User-Mode)或者是内核模式的程序(Kernel-Mode),WinDbg可以像VC++ 一样在被调试的程序中设置断点,察看变量的值,察看内存的情况,而且它还支持很多的调试命令使得调试者可以很充分的分析被调试的程序,你可以在微软的网站上免费下载WinDbg的最近版本(http://www.microsoft.com/ddk/debugging/).

c.DrWatson

Windows自带的调试器,它没有提供前面提到的CDB,NTSD,WinDbg那么多的调试命令,它的主要用途是在应用程序崩溃后产生log,dump文件使得调试者事后及时地看到崩溃的现场环境以便于定位崩溃的原因和位置.DrWatson也是Windows自带的,在使用之前需要先将其注册成系统默认的当前调试工具.

Symbol Files(符号文件)

不管是对CDB,NTSD,WinDbg等支持及时调试的调试工具还是DrWatson这种事后调试工具符号文件(Symbol Files)都是很重要的,下面我们来讲讲符号文件.

当我们用VC++编写一个Sample.DLL(Win32形式的或者是MFC形式的)的时候,我们通过设置 VC++的编译开关可以让VC++在编译的时候产生对应于该DLL的符号文件(Sample.PDB,当然你也可以取其它的你认为满意的名字),该Sample.PDB中就会包含Sample.DLL的调试信息,具体包括:

1.全局变量;

2.局部变量;

3.函数名和它们的入口地址;

4.FPO Data(Frame Pointer Omission),frame pointer是一种用来在调试调用堆栈中找到下一个将要被调用的函数的数据结构源代码的行序号(Source-line numbers);

有了符号文件或者说有了这些调试信息有什么好处呢?据个例子来说,有了Sample.PDB,调试器就可以在Sample.DLL发生崩溃的时候明确的定位出是Sample.DLL中哪一个函数出错,如果没有符号文件调试器将让你看一堆的汇编语句,毫无疑问,这将给你的调试工作带来很大的困难.

对于大多数应用程序来说毫无例外的要调用到Windows提供的API,这些API存在于系统的DLL, EXE等二进制文件中,所以我们很有必要得到类似于GDI32.DLL,Kernel32.DLL之类的系统 DLL以及其他系统文件(我指的是二进制文件)的符号文件,这样我们在调试我们自己的应用程序的时候就能很清晰地看到我们的应用程序调试系统提供的函数的情况,我们可以在微软的网站上下载(下载地址详见附录)对应于不同操作系统版本的符号文件,注意,当我们的Windows在安装了符号文件以后又打了补丁或升级了Windows部件的话符号文件需要相应的更新!这很容易理解:当微软升级WindowsXP下的system32.dll的时候肯定需要重新编译改DLL的源代码,这时候产生的符号文件肯定和老版本的system32.dll产生的符号文件不一样.

当我们下载并安装符号文件后需要做一些配置使得调试器能找到这些符号文件,如果你需要让你的VC++知道符号文件的地址你可以按照下面的步骤设置:

1.打开VC6++;

2.选择Tools->Options;

3.点击Options对话框中的Directoties;

4.下拉Show directories for下拉框,选择 Executable;

5.将你的符号文件路径添加到该处;

6.点击确定完成.

如果你需要让NCDB,NTSD,WinDbg,DrWatso32知道符号文件的地址,你需要设置一个环境变量_NT_SYMBOL_PATH,下面是在Windows XP Pro中设置的例子:

设置完成后如果你用WinDbg打开被调试程序,这时候你打开File->Symbol File Path..就可以看到WinDbg已经找到了符号文件的位置:

同样道理,当我们要调试我们自己的应用程序的时候我们也需要我们自己程序的符号文件,当你有该程序的源代码的时候(我想你肯定应该有吧)你可以通过设置VC++的编译开关来产生,下面是VC++6中设置的方法(其他版本的VC++请参看其帮助文档):

同样你需要通过设置环境变量等方法来让调试器知道你的符号文件的位置,这样有了调试器,符号文件以及环境变量的设置你的调试环境就搭建起来了,下面通过调试一个例子程序介绍如何利用WinDbg调试应用程序.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有