阅读:3995回复:11
怎样用WINDBG调试dump文件,怎么设置WINDBG
很多资料上说最重要的是要正确设置符号文件路径,书上说符号文件包括系统符号文件和自己程序本身的符号文件。
系统符号文件我是从微软网战上下载的,一共有了5个包,按提示,我装上了符号到系统的默认路径下。这里我有个疑问,我的操作系统是win2000,sp4,但 下载的符号文件不区分是哪个包的,是不是除了 这个符号文件外还要再安装 sp1,sp2,sp3,sp4 的符号文件?但我找不到这些符号文件 。 另外自己程序生成的符号文件是不是也要加在WINDBG的符号文件路径下? 谁能详细说说怎么设置这些东西,我设置好了,但我打开一个。dmp文件的时候老是说不能装载ntoskrnl.exe,无法调试, 调用堆栈里也没有任何内容,都是一大堆???。 到底是怎么回事? |
|
最新喜欢:Leopar...
|
沙发#
发布于:2004-02-17 22:07
The symbol files on the host machine are required to match the version and build type of Windows installed on the target machine. This fundamental point cannot be overstressed. For example:
• If you are planning to do a kernel mode debug of a Windows 2000 Service Pack 2 target, you need to install the symbols for Windows 2000, and those for Windows 2000 Service Pack 2, on the host system, regardless of which operating system version the host is running. • If you plan to perform user-mode debugging on the same machine as the target application, then install on that system the symbol files that match the version of Windows running on that system. • If you are analyzing a memory dump file, then the version of symbol files needed on the debug computer are those that match the version of the operating system that produced the dump file, not necessarily those matching the version of the operating system on the machine running the debug session. |
|
板凳#
发布于:2004-02-18 10:18
• If you are analyzing a memory dump file, then the version of symbol files needed on the debug computer are those that match the version of the operating system that produced the dump file, not necessarily those matching the version of the operating system on the machine running the debug session. 你的意思是,如果我的 dmp文件在另一台机子上产生的,那么我要安装的操作系统符号版本要和产生dmp 文件机子的系统版本一致,不需要和调试dmp文件的机子系统版本一致,是吗? |
|
|
地板#
发布于:2004-02-18 10:31
right.
|
|
地下室#
发布于:2004-02-18 11:17
我现在遇到的问题是,产生dmp 文件的机子系统是win2000,sp4 ,但我装的系统符号文件只是WIN2000的,从微软网站下载的,哪里能找到sp4 的符号文件呢?
|
|
|
5楼#
发布于:2004-02-18 13:49
http://www.microsoft.com/whdc/ddk/debugging/symbolpkg.mspx
|
|
6楼#
发布于:2004-02-19 20:50
首先感谢changjt大哥的热情帮助,我已经下在了win2000,sp4的符号文件,装上了,下面是我整个操作步骤和问题,耐心看一下好吗?
通过用WINDBG分析系统崩溃.dmp文件来定位产生异常的程序代码位置。 系统配置: 1.系统:win2000,sp4。 2.windbg版本:6.2.0013.0. 3.先安装了win2000 系统符号文件,然后安装win2000,sp4系统符号文件,都安装在默认目录: C:\WINNT\Symbols下。 驱动程序符号文件目录:E:\驱动程序\jiema\sys\objchk\i386,符号文件为:jiema.pdb. 可执行程序目录:E:\驱动程序\jiema\sys\objchk\i386,可执行程序(映象文件):jiema.sys. 源程序目录:E:\驱动程序\jiema\sys。 下面是我的操作步骤: "File"->"Open Crash Dump",选择C:\WINNT\Minidump目录下的Mini021904-01.dmp文件, 警告对话框"Save base workspace information"中选择“yes", 接着出现了下面的提示: Loading Dump File [C:\WINNT\Minidump\Mini021904-01.dmp] Mini Kernel Dump File: Only registers and stack trace are available Symbol search path is: C:\WINNT\Symbols;E:\驱动程序\jiema\sys\objchk\i386 Executable search path is: E:\驱动程序\jiema\sys\objchk\i386 Unable to load image ntoskrnl.exe, Win32 error 2 *** WARNING: symbols timestamp is wrong 0x384d9b17 0x3ee6c002 for ntoskrnl.exe Windows 2000 Kernel Version 2195 UP Free x86 compatible Kernel base = 0x80400000 PsLoadedModuleList = 0x8046a4c0 Debug session time: Thu Feb 19 11:32:19 2004 System Uptime: not available Unable to load image ntoskrnl.exe, Win32 error 2 *** WARNING: symbols timestamp is wrong 0x384d9b17 0x3ee6c002 for ntoskrnl.exe Loading Kernel Symbols ............................................................................................... Loading unloaded module list ..................... Loading User Symbols ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck D1, {4, 2, 0, b6f0bfa2} *** WARNING: Unable to verify timestamp for NTice.sys *** ERROR: Module load completed but symbols could not be loaded for NTice.sys Unable to load image jiema.sys, Win32 error 2 *** WARNING: Unable to verify timestamp for jiema.sys *** ERROR: Module load completed but symbols could not be loaded for jiema.sys Probably caused by : jiema.sys ( jiema+1fa2 ) Followup: MachineOwner --------- 对于以上提示,我有几个问题: 1。Mini Kernel Dump File: Only registers and stack trace are available 为什么只能获得寄存器和堆栈信息?这正常吗? 2. Unable to load image ntoskrnl.exe, Win32 error 2 为什么会这样,怎样解决? 3. *** WARNING: symbols timestamp is wrong 0x384d9b17 0x3ee6c002 for ntoskrnl.exe 为什么这样,对于正常的调试有影响吗? timestamp是什么意思? 4. *** WARNING: Unable to verify timestamp for NTice.sys *** ERROR: Module load completed but symbols could not be loaded for NTice.sys 这些对正常的调试有影响吗? Unable to load image jiema.sys, Win32 error 2 我明明指定了映象文件路径,这里为什么还提示不能装载该文件? *** WARNING: Unable to verify timestamp for jiema.sys *** ERROR: Module load completed but symbols could not be loaded for jiema.sys 这些又是为什么?到底是我哪里的设置不对?才会出现这么多的错误和警告?? 下面是我用!analyze -v 命令后的显示: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1) An attempt was made to access a pageable (or completely invalid) address at an interrupt request level (IRQL) that is too high. This is usually caused by drivers using improper addresses. If kernel debugger is available get stack backtrace. Arguments: Arg1: 00000004, memory referenced Arg2: 00000002, IRQL Arg3: 00000000, value 0 = read operation, 1 = write operation Arg4: b6f0bfa2, address which referenced memory Debugging Details: ------------------ READ_ADDRESS: unable to read from 80482fac unable to read from 80482a08 unable to read from 804828e0 unable to read from 80474e00 unable to read from 804828f8 unable to read from 80482a04 unable to read from 80474e04 unable to read from 80482ac4 unable to read from 80482f80 00000004 CURRENT_IRQL: 2 FAULTING_IP: jiema+1fa2 b6f0bfa2 ?? ??? DEFAULT_BUCKET_ID: DRIVER_FAULT BUGCHECK_STR: 0xD1 LAST_CONTROL_TRANSFER: from 00000000 to bfdfd695 STACK_TEXT: 8046fcb4 00000000 00000004 00000002 00000000 NTice+0x4f695 FOLLOWUP_IP: jiema+1fa2 b6f0bfa2 ?? ??? FOLLOWUP_NAME: MachineOwner SYMBOL_NAME: jiema+1fa2 MODULE_NAME: jiema IMAGE_NAME: jiema.sys DEBUG_FLR_IMAGE_TIMESTAMP: 40342e34 STACK_COMMAND: kb BUCKET_ID: 0xD1_jiema+1fa2 Followup: MachineOwner --------- 从这些数据里,我怎么才能定位我的源代码位置呢? |
|
|
7楼#
发布于:2004-02-20 16:46
1、关于Minidump,是三种DUMP文件中包含信息最少的一个,仅包括bug check information, list of loaded drivers, the PRCB, EPROCESS, ETHREAD, and kernel-mode stack for the process and thread that failed等,并不包含dump时系统内存的内容,所以在你调试过程中所有涉及的内存地址都是can't read.建议使用Complete Dump或Kernel Dump进行调试.
2、关于那个Win32错误,你检查一下Windbg里关于Symbol、Image file path的设置是否都正确。 3、Timestamp时间戳是用来校验你的Symbol文件是否与加载的Image版本相符的,看来你的ntoskrnl和jiema的符号加载都有问题,记得把jiema.dbg(Win2003里的符号才会用到pdb)也放到你的Symbol PATH里,另外你Down的SP4 Symbol版本语言没问题吧?怎么时间戳会相差那么大?肯定有问题 4、没有NTice的符号文件对调试没什么影响,好好检查一下Image PATH的设置,就不会有这么多报错了,不过Image还是load了,因为缺乏相应的Symbol,它只找到一个相关的偏移jiema+1fa2,要想继续往下调试,Minidump是无能为力了 |
|
8楼#
发布于:2004-02-20 19:51
1、关于Minidump,是三种DUMP文件中包含信息最少的一个,仅包括bug check information, list of loaded drivers, the PRCB, EPROCESS, ETHREAD, and kernel-mode stack for the process and thread that failed等,并不包含dump时系统内存的内容,所以在你调试过程中所有涉及的内存地址都是can't read.建议使用Complete Dump或Kernel Dump进行调试. 感谢你上面的回答,我还有个问题,我驱动程序的符号文件是jiema.nms 和jiema.pdb,没有jiema.dbg,因为是用DS写的,所以没有jiema.dbg请问,怎么得到jiema.dbg文件?如果用DDK重新编译,我想是不可能的,因为它不能包含DS类库信息,那怎么办? |
|
|
9楼#
发布于:2004-02-25 16:44
怎么不回答了,我下载的sp4 的符号文件的版本没问题,是简体中文版,那为什么老是提示错误呢?
|
|
|
10楼#
发布于:2004-02-26 08:08
你的Image PATH设置有问题。
因为你做的是Minidump,没有Ntoskrnl.exe的内存映象,因此还需要在_NT_EXECUTABLE_IMAGE_PATH的设置里包含指向SP4的Ntoskrnl.exe(timestamp 0x3ee6c002)的路径,系统找不到的话,就会去加载主机自己(Win2000)的Ntoskrnl.exe(timestamp 0x384d9b17),造成不匹配,所以报错。 你可以在Windbg里使用!sym noisy和.reload nt来明细Symbol的加载过程,这样你就知道是哪里有问题了。 我从不用Small Dump,所以也没有碰到过这个问题,一劳永逸的方法就是保持Host与Target环境的一致,这样就可以蒙混过关了:) 强烈建议不要使用Minidump了,它只能做到问题的大致定位,无法进一步调试和分析的 |
|
11楼#
发布于:2005-04-13 17:41
我遇到了同样的问题,老是死机,我都急坏了。我是用WinXP做主机调试Win2K SP4的机器内的驱动程序。Win2K启动时Windbg显示“*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntoskrnl.exe -
” 在启动驱动时显示“Connected to Windows 2000 2195 x86 compatible target, ptr64 FALSE Loading Kernel Symbols ............................................................................................................ Loading unloaded module list .............. Loading User Symbols PEB address is NULL !”然后就死机啦! 请帮帮忙! 多谢! |
|