如何诊断Windows CE的应用程序崩溃(续) (转载)

 在《如何诊断Windows CE的应用程序崩溃》一文中我介绍了如何利用Remote Process Explorer的Crack Address功能定位程序的崩溃地址。但是看起来还是有很多人不知道怎么使用这个工具,这篇文章详细介绍一下。

首先要确保你的PC上有dbghelp.dll。微软没有公开PDB文件格式,不过有解析PDB文件的API,在dbghelp.dll中提供,最新版本可在微软网站上下载。在微软推出.NET Framework之前,基于COM组件编程很流行,因此微软也以COM组件的形式提供了另外一组接口,叫DIA(Debug Interface Access)。Remote Proecess Explorer用dbghelp.dll解析WinCE调试符号,由于WinCE的可执行程序模块使用PE格式,调试符号文件使用PDB格式,和 Windows桌面平台一样。因此它也可以分析Windows桌面应用程序地址。dbghelp.dll可以放到系统目录(c:/windows /system32),或者放到remote process explorer所在目录。

其次应该把EXE/DLL和PDB放在一个目录。如果放在不同目录,dbghelp可能会找不到PDB。

具体用这个工具有几步。举个例子来说明,比如要定位下面的崩溃地址PC=03f7e034:

RaiseException: Thread=8d5108b0 Proc=81a37040 'device.exe'
AKY=00000205 PC=03f7e034(coredll.dll+0x0001e034) RA=80120ef4(NK.EXE+0x00020ef4) BVA=00000001 FSR=00000001
从PC=03f7e034(coredll.dll+0x0001e034) 这句我们知道三个重要信息:崩溃模块coredll.dll,崩溃地址0x03f7e034,模块加载基地址0x03f7e034-0x0001e034=0x03f60000。CE5以前的版本不会显示(coredll.dll+0x0001e034),基地址不能直接算出来。不过一般来说这些DLL如果你的系统没有做过很大改变,每次加载的基地址是一样的,所以你可以把系统运行起来查看它的加载基地址。

根据这三条信息Remote Process Explorer就可以工作了:

1,Cracking Address填崩溃地址:0x03f7e034

2,base address填基地址:0x03f60000

3,模块路径栏填coredll.dll的全路径,可以用右面的按钮定位。

 

 

现在可以试着按第三行的寻找按钮(有一个放大镜的图标)。顺利的话应该就能提示源文件路径、函数名和代码行。在设当设置了调试符号搜索路径和源文件搜索路径后,下面的文本框还能直接显示源代码,崩溃行用红色标出。搜索路径在"File --> File Path..."对话框里设置(多个路径用分号;分隔):

 

 

 

由于生成PDB时的源文件路径和我们安装Platform Builder的WINCE路径肯定不一样,因此最下面的"Source Path Mapping"还要做一些路径映射,方便Remote Process Explorer搜索源代码。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/singlerace/archive/2009/02/26/3940619.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值