我在我的一个程序中,引入了XCrashReport,当程序崩溃的时候,生成一个dump文件
我想通过这个dump文件来查找引起崩溃的代码,代码行是可以找到。我用的是WinDbg。
但是把鼠标移到出错代码附近的变量,不能显示变量的值,WinDbg提示:Your debugger is not using the correct symbols, in order for this command to work properly, your symbol path must point to .pdb files that have full type infomation.我已经设置了Source Path和Symbol Path,要不然也不会跳到出错的行,难道我的.pdb没有“full type information",我用的是VS2005, 调试的是C++(非托管)
我想通过这个dump文件来查找引起崩溃的代码,代码行是可以找到。我用的是WinDbg。
但是把鼠标移到出错代码附近的变量,不能显示变量的值,WinDbg提示:Your debugger is not using the correct symbols, in order for this command to work properly, your symbol path must point to .pdb files that have full type infomation.我已经设置了Source Path和Symbol Path,要不然也不会跳到出错的行,难道我的.pdb没有“full type information",我用的是VS2005, 调试的是C++(非托管)
.sympath+ c:\mydir\ <==== 让Windbg能找到你自己的Pdb
.srcpath c:\mydir\mysourcecode <==== 你源程序的路径
.reload -f 之后就可以看到了。有时间我写个Blog
我本来就是可以找到引起crash的代码的。但是不能看那些代码附件变量的值,我想看它们的值是多少。P.S.我用的是 .ecxr 命令
lml先看看你的程序是不是已经加载了你的Private Symbol(注意你的pdb文件一定是Build用户那个执行文件时候保留下来的,不能重新Build)。你如果PDB文件没有加载正确的话是不行的。对于简单的Crash,先用!Analyze -v看看。然后kv看看Stack,dv显示当前变量等等。我怀疑是你的PDB文件和产生Dump的执行文件对不上。你可以用下列命令搞清楚为什么!sym noisy
.reload -f这套东西我天天用,错不了。
不知道feimingbiao()兄弟,是什么编译器,你是怎么生成的,谢谢:)
或许你没有指定symbol服务路径
还有你的程序的.pdb是否存在
.reload -f
lml你能把结果Paste到这里我看看吗?你的PDB文件有Load起来吗?另外我们从来不用IDE,都是Make File所以不太知道VC6和VC2005的区别,我的cl.exe的版本是: 14.00.50727.276
借宝地请教一下WINDBG的调试方法。
我是这样操作的,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 -
这上面的这个提示对调试有没有影响?
谢谢!
我在驱网上问了,没人甩的, 还请各位赐教了。
我的QQ,53183912,如能加我,不胜感激!
No export Analyze found 我连 !Analyze -v 命令也不能使用??是在
软件的最后一个编辑框中输入命令吗 ??
http://blog.csdn.net/AloneSword/archive/2009/01/03/3696839.aspx