happyhippy

这个世界的问题在于聪明人充满疑惑,而傻子们坚信不疑。--罗素
posts - 135,comments - 444,trackbacks - 45

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。

1. WinDbg介绍:
    Debugging Tools and Symbols: Getting Started
http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
    A word for WinDbg
http://mtaulty.com/communityserver/blogs/mike_taultys_blog/archive/2004/08/03/4656.aspx


2. WinDbg下载:
  Install Debugging Tools for Windows 32-bit Version
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
  Install Debugging Tools for Windows 64-bit Versions
http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx


3. 配置WinDbg:
     运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:
在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载Symbols)。另一种做法是从这个Symbol下载地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所需要的完整的Symbol安装包,并进行安装,例如我将其安装在D:\WINDOWS\Symbols,在该框中输入“D:\WINDOWS\Symbols”。(这里要注意下载的Symbols的版本一定要正确,在我的Win2003+Sp1上,我曾经以为安装Win2003+Sp2的Symbols可能会牛×点,但结果证明我错了,用WinDbg打开可执行文件时,提示“PDB symbol for mscorwks.dll not loaded;Defaulted to export symbols for ntdll.dll”的错误,我有重新装上Win2003+Sp1的Symbols, 现在一切运行正常^_^


4. 使用WinDbg:
     WinDbg提供了图形界面和命令行两种运行方式。这里介绍使用图形界面的WinDbg来调试应用程序:
     File->OpenExecutable->可以选择一个可执行文件进行调试;
     File->Attache to a Process->可以选择一个运行中的进程,并对其进行调试;





     至此,我们就可以在上图中用红色方框标记的文本框中输入各个功能指令了(有关指令的帮助文档,可以参考:Help->Contents->Debugging Tools for Windows->Debuggers->Debugger Reference,该目录下列集了所有指令机器功能说明!)。 




happyhippy作者:Silent Void
出处:http://happyhippy.cnblogs.com/
转载须保留此声明,并注明在文章起始位置给出原文链接。
 
posted on 2007-04-08 00:08 Silent Void 阅读(44140) 评论(21) 编辑 收藏

FeedBack:
2007-07-09 10:03 | Jim[未注册用户]
Hi,
我用你的方法来调试一个EXE文件,你能举个例子么?
能否列一些基本的调试命令的调试方法么?
Thanks!

 回复 引用   
2007-07-10 13:30 | happyhippy
可以参考:Help->Contents->Debugging Tools for Windows->Debuggers->Debugger Reference,该目录下列集了所有指令机器功能说明
 回复 引用   
2007-07-13 11:52 | Jim[未注册用户]
Hi happyhippy,
我是这样调试的,但是始终没成功的。
1.生成符号信息
更改Relase版的设置(2处):
一、Project Setting ->C/C++
Debug info:
选择Program Database
二、Project Setting ->Link
选中Generate debug info
重新编译
2.安装Windbg
下载安装最新的Windbg
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
3.设定环境变量
对于user32.dll等系统文件,Windbg可以自动从微软网站下载所需的符号信息.我们只需设定_NT_SYMBOL_PATH
这个环境变量告诉Winddbg.方法如下:
我的电脑>右键菜单>属性>高级选项卡>环境变量>系统变量>新建
变量名: _NT_SYMBOL_PATH
变量值:SRV*C:\websymbols* http://msdl.microsoft.com/download/symbols
解释一下: C:\websymbols用来存储系统符号.你可以指定其他的路径.Windbg会自动创建该文件夹
4.设定符号路径
新建一个文件夹,譬如C:\MyAppSymbols
将第一步中生成的Release目录下<youapp>.pdb文件拷贝到该文件夹,该pdb文件包含了调试所需的符号信息.
打开Windbg,选择File>Symbol file path>将C:\MyAppSymbols路径添加进去

5.调试程序
选择 File > Open Executable 然后选择你需要调试的Exe文件,就显示
WARNING: Whitespace at end of path element
CommandLine: C:\test\Release\test.exe
Symbol search path is: SRV*C:\websymbols* http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00400000 00405000 test.exe
ModLoad: 77f80000 77ffd000 ntdll.dll
ModLoad: 6bc40000 6bd3b000 C:\WINNT\system32\MFC42.DLL
ModLoad: 78000000 78045000 C:\WINNT\system32\MSVCRT.dll
ModLoad: 77e60000 77f33000 C:\WINNT\system32\KERNEL32.dll
ModLoad: 77f40000 77f7c000 C:\WINNT\system32\GDI32.dll
ModLoad: 77df0000 77e4f000 C:\WINNT\system32\USER32.dll
(318.430): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00131f04 ecx=00000009 edx=00000000 esi=7ffdf000 edi=00131f70
eip=77f813b1 esp=0012f984 ebp=0012fc98 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
ntdll!DbgBreakPoint:
77f813b1 cc int 3

然后我就用BP来设置断点用F5来执行,显示
ModLoad: 75e00000 75e1a000 C:\WINNT\system32\IMM32.DLL
ModLoad: 796d0000 79732000 C:\WINNT\system32\ADVAPI32.DLL
ModLoad: 786f0000 7875f000 C:\WINNT\system32\RPCRT4.DLL
ModLoad: 6bc20000 6bc2d000 C:\WINNT\system32\MFC42LOC.DLL
ModLoad: 71710000 71794000 C:\WINNT\system32\COMCTL32.DLL
ModLoad: 6dd30000 6dd36000 C:\WINNT\system32\INDICDLL.dll
ModLoad: 10000000 10055000 C:\Program Files\Tencent\RTXC\RTXOLAss.dll
ModLoad: 76af0000 76b2e000 C:\WINNT\system32\comdlg32.dll
ModLoad: 772a0000 77306000 C:\WINNT\system32\SHLWAPI.DLL
ModLoad: 78f90000 791d6000 C:\WINNT\system32\SHELL32.DLL
ModLoad: 777c0000 777de000 C:\WINNT\system32\WINSPOOL.DRV
ModLoad: 79b20000 79b30000 C:\WINNT\system32\MPR.DLL
ModLoad: 7cf00000 7cfef000 C:\WINNT\system32\ole32.dll
ModLoad: 68e90000 68eb9000 C:\WINNT\system32\OLEPRO32.DLL
ModLoad: 77990000 77a2b000 C:\WINNT\system32\OLEAUT32.dll
Breakpoint 0 hit
eax=00000001 ebx=00000001 ecx=0012fac0 edx=00130608 esi=00402300 edi=0012fe94
eip=004014ee esp=0012f99c ebp=0012f9a8 iopl=0 nv up ei ng nz ac pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000296
test!CTestDlg::OnButton1+0xe:
004014ee c3 ret

不知道这样操作有没有什么错误的,
如果是对的,那怎么看它的调试信息?
如果不对,还请各位赐教。
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
这上面的这个提示对调试有没有影响?
谢谢!

 回复 引用   
2007-07-13 12:33 | happyhippy
@Jim

"C:\websymbols用来存储系统符号.你可以指定其他的路径.Windbg会自动创建该文件夹",你可以先查看下,windbg有没有从ms的网站上把symbols下载回来?

刚开始我也尝试过让windbg从ms下载symblos,试了几次没有成功,最后我自己的做法是:从http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所对应的完整的Symbol安装包,并进行安装。

 回复 引用   
2007-07-13 13:42 | Jim[未注册用户]
Hi happyhippy ,
1.生成符号信息
更改Relase版的设置(2处):
一、Project Setting ->C/C++
Debug info:
选择Program Database
二、Project Setting ->Link
选中Generate debug info
我这样操作后就生成了个.pdb符号文件的。我将这个文件COPY到C:\websymbols中的。
应该不会提示说找不到符号文件的啊,还请赐教。
谢谢。
Jim

 回复 引用   
2007-07-13 15:06 | happyhippy
@Jim

windbg调试时需要用到OS的Symbol(自己从网上下载安装或按照上面的配置让windbg自动下载)

 回复 引用   
2007-07-13 15:15 | Jim[未注册用户]
还有点就是我们配置VC生成的.pdb符号文件和从网上下载的那个符号文件有什么区别?
我从网上看到的信息是说我们自己生成的.pdb符号文件包含一些调试信息的,如果是这样的话, 那应该只要我们自己的符号调试文件就可以的了啊。
Jim

 回复 引用   
2007-07-13 16:12 | happyhippy
@Jim

我们的程序运行在操作系统之上,而不是裸机上...

 回复 引用   
2007-07-14 08:51 | Jim[未注册用户]
Hi happyhippy,
按照你说的方法我操作到这里了,
WARNING: Whitespace at end of path element

Microsoft (R) Windows Debugger Version 6.7.0005.1
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: C:\test\Release\test.exe
Symbol search path is: c:\symbols;C:\WINNT\Symbols;srv*c:\symbols*http://msdl.microsoft.com/download/symbols
;srv*c:\sym*http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00400000 00405000 test.exe
ModLoad: 77f80000 77ffd000 ntdll.dll
ModLoad: 6bc40000 6bd3b000 C:\WINNT\system32\MFC42.DLL
ModLoad: 78000000 78045000 C:\WINNT\system32\MSVCRT.dll
ModLoad: 77e60000 77f33000 C:\WINNT\system32\KERNEL32.dll
ModLoad: 77f40000 77f7c000 C:\WINNT\system32\GDI32.dll
ModLoad: 77df0000 77e4f000 C:\WINNT\system32\USER32.dll
(324.400): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00131f04 ecx=00000009 edx=00000000 esi=7ffdf000 edi=00131f70
eip=77f813b1 esp=0012f984 ebp=0012fc98 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
ntdll!DbgBreakPoint:
77f813b1 cc int 3
0:000> lm
start end module name
00400000 00405000 test C (private pdb symbols) c:\test\Release\test.pdb
6bc40000 6bd3b000 MFC42 (deferred)
77df0000 77e4f000 USER32 (deferred)
77e60000 77f33000 KERNEL32 (deferred)
77f40000 77f7c000 GDI32 (deferred)
77f80000 77ffd000 ntdll (pdb symbols) c:\symbols\ntdll.pdb\4035165E1\ntdll.pdb
78000000 78045000 MSVCRT (deferred)
0:000> bl
0 e 004014e0 0001 (0001) 0:**** test!CTestDlg::OnButton1

之后我按F5来执行,执行过后又这样操作的,
选择View--Watch ,输入我定义的一个变量i,然后按ENTER 键,我想这样来看变量i的值,但是此时它提示,
*** WARNING: Unable to verify checksum for C:\Program Files\Tencent\RTXC\RTXOLAss.dll
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\Tencent\RTXC\RTXOLAss.dll -
*** ERROR: Module load completed but symbols could not be loaded for C:\WINNT\system32\MFC42LOC.DLL
*** WARNING: symbols timestamp is wrong 0x44ef1374 0x3ef31d12 for C:\WINNT\system32\COMCTL32.DLL
我始终看不到变量i的值,我该怎样操作才可以看到?
谢谢,常来打扰你的, 真的是不好意思的,呵呵。

 回复 引用   
2007-07-24 16:40 | 新过路人[未注册用户]
一不小心找到了你的blog,windbg的内容非常详细,非常吸引人,想到这里多停留一段时间。能告诉我你的qq或者msn吗,这样可以更方便的向你请教?
 回复 引用   
#11楼[楼主]
2007-07-26 20:25 | Silent Void      
@新过路人

不好意思,上班时间,很少上qq或者msn;
可以EMail交流:happyhippy.163.com

 回复 引用 查看   
2007-09-05 09:13 | dd[未注册用户]
可以說明一下內核模式的調試嗎?
 回复 引用   
2008-12-15 15:22 | 阿——水[未注册用户]
Microsoft (R) Windows Debugger Version 6.10.0003.233 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Connected to Windows XP 2600 x86 compatible target at (Mon Dec 15 15:19:57.441 2008 (GMT+8)), ptr64 FALSE
Symbol search path is: D:\WINDOWS\symbols
Executable search path is:
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntoskrnl.exe -
*******************************************************************************
WARNING: Local kernel debugging requires booting with kernel
debugging support (/debug or bcdedit -debug on) to work optimally.
*******************************************************************************
Windows XP Kernel Version 2600 (Service Pack 3.5657) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 2600.xpsp_sp3_gdr.080814-1236
Machine Name:
Kernel base = 0x804d8000 PsLoadedModuleList = 0x8055c1c0
Debug session time: Mon Dec 15 15:19:57.481 2008 (GMT+8)
System Uptime: 0 days 1:29:30.053


弄到这里就不行了,符号也下载了,就是找不到
帮我看看是怎么回事啊?谢谢了
我的系统是gost版的,跟这个有关系么?

 回复 引用   
#14楼[楼主]
2008-12-20 21:32 | Silent Void      
@阿——水
Symbols是手动下载的还是自动下载的?
1.确认D:\WINDOWS\symbols存在ntoskrnl.exe对应的symbols;
2.如果是手动下载的,确认当前版本与当前OS的版本是否匹配;

 回复 引用 查看   
2009-01-05 13:43 | xiaopohai_long      
请问出现这个问题该怎么办?
*** WARNING: Unable to verify checksum for...
这个warning该怎么解决?

 回复 引用 查看   
2009-03-23 23:25 | balong
博主在吗?我在微软网站上下载了xp的sp2symbol,安装之后,用windbg的symbol path菜单指定了安装的目录,但是在新建一个kernel debug后,重新加载symbol,还是回出现symbol not to be found结果,同时指出了pdb文件找不到和不匹配,我的操作系统也是xp-sp2的啊,cpu是双核的啊,但是为什么还是设置不了symbol呢?谢谢!
 回复 引用   
2009-04-21 05:32 | 57754[未注册用户]
@balong

kernel模式需要双机调试的,需要的是DDK的symbol,一般用来调试驱动的

 回复 引用   
2009-09-23 10:50 | yankai      
好东东、
 回复 引用 查看   
2010-03-15 16:01 | Xuon      
如果分析dump文件的话,Symbols的版本指的是生成dump文件的那个系统的版本吧,而不是安装WinDbg那个系统的版本吧。
比如我在XP下分析Windows2003上拿下来的dump文件,就得装Windows2003的Symbols。
——————————————————————————

上面是我在配置WinDbg之前的想法。

我实际遇到的问题是这样的:

我的系统是XPSP3的,试了XPSP3系统的Symbols还是提示:
ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll

因为文件是Windows2003SP2中的,也试了Windows2003SP2的四个不同版本的Symbols,问题依然存在。

 回复 引用 查看   
2010-05-01 13:11 | 金鳞      
大概如此了!
 回复 引用 查看   
2010-05-01 14:45 | 金鳞      
配置如下环节时,按楼主所说那样设置后,

“在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols””


发现呢,实际上,在我的c盘下并没有生成C:\MyCodesSymbols,而是生成了C:\mylocalsymbols。

所以重新执行WinDbg->菜单->File->Symbol File Path,点击浏览,重新选择路径,就不会报Error了。

WinXP sp3

 回复 引用 查看