问题描述:
TCHAR sztestBuf[56] = { 0 };
int d=20;
_stprintf(sztestBuf,_T("%s"),d);用这段代码测试crash,生成dump文件了,通过windbg使用命令!analyze -v 却无法定位到代码行。请高手指教,不甚感激!!以下是分析得到的结果。问题是如何才能定位到代码出错的地方?难道如果调用了crt库里函数,就无法定位到代码行了??0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
********************************************************************************** ERROR: Symbol file could not be found. Defaulted to export symbols for kernel32.dll -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ole32.dll -
Map C:\WINDOWS\system32\user32.dll:
Image region 60400:29400 does not fit in mapping
*** WARNING: Unable to verify timestamp for user32.dllFAULTING_IP:
msvcr90!_woutput_l+94c [f:\dd\vctools\crt_bld\self_x86\crt\src\output.c @ 1624]
78576b6a 66833800 cmp word ptr [eax],0EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 78576b6a (msvcr90!_woutput_l+0x0000094c)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000014
Attempt to read from address 00000014DEFAULT_BUCKET_ID: APPLICATION_FAULTPROCESS_NAME: 5see.exeERROR_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"READ_ADDRESS: 00000014 BUGCHECK_STR: ACCESS_VIOLATIONLAST_CONTROL_TRANSFER: from 00000000 to 00000000STACK_TEXT:
00680063 00000000 00000000 00000000 00000000 0x0
STACK_COMMAND: ~0s; .ecxr ; kbFOLLOWUP_IP:
msvcr90!_woutput_l+94c [f:\dd\vctools\crt_bld\self_x86\crt\src\output.c @ 1624]
78576b6a 66833800 cmp word ptr [eax],0FAULTING_SOURCE_CODE:
No source found for 'f:\dd\vctools\crt_bld\self_x86\crt\src\output.c'
SYMBOL_NAME: msvcr90!_woutput_l+94cFOLLOWUP_NAME: MachineOwnerMODULE_NAME: msvcr90IMAGE_NAME: msvcr90.dllDEBUG_FLR_IMAGE_TIMESTAMP: 4a594c79FAULTING_THREAD: 00000ab4FAILURE_BUCKET_ID: ACCESS_VIOLATION_msvcr90!_woutput_l+94cBUCKET_ID: ACCESS_VIOLATION_msvcr90!_woutput_l+94cFollowup: MachineOwner
TCHAR sztestBuf[56] = { 0 };
int d=20;
_stprintf(sztestBuf,_T("%s"),d);用这段代码测试crash,生成dump文件了,通过windbg使用命令!analyze -v 却无法定位到代码行。请高手指教,不甚感激!!以下是分析得到的结果。问题是如何才能定位到代码出错的地方?难道如果调用了crt库里函数,就无法定位到代码行了??0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
********************************************************************************** ERROR: Symbol file could not be found. Defaulted to export symbols for kernel32.dll -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ole32.dll -
Map C:\WINDOWS\system32\user32.dll:
Image region 60400:29400 does not fit in mapping
*** WARNING: Unable to verify timestamp for user32.dllFAULTING_IP:
msvcr90!_woutput_l+94c [f:\dd\vctools\crt_bld\self_x86\crt\src\output.c @ 1624]
78576b6a 66833800 cmp word ptr [eax],0EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 78576b6a (msvcr90!_woutput_l+0x0000094c)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000014
Attempt to read from address 00000014DEFAULT_BUCKET_ID: APPLICATION_FAULTPROCESS_NAME: 5see.exeERROR_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"READ_ADDRESS: 00000014 BUGCHECK_STR: ACCESS_VIOLATIONLAST_CONTROL_TRANSFER: from 00000000 to 00000000STACK_TEXT:
00680063 00000000 00000000 00000000 00000000 0x0
STACK_COMMAND: ~0s; .ecxr ; kbFOLLOWUP_IP:
msvcr90!_woutput_l+94c [f:\dd\vctools\crt_bld\self_x86\crt\src\output.c @ 1624]
78576b6a 66833800 cmp word ptr [eax],0FAULTING_SOURCE_CODE:
No source found for 'f:\dd\vctools\crt_bld\self_x86\crt\src\output.c'
SYMBOL_NAME: msvcr90!_woutput_l+94cFOLLOWUP_NAME: MachineOwnerMODULE_NAME: msvcr90IMAGE_NAME: msvcr90.dllDEBUG_FLR_IMAGE_TIMESTAMP: 4a594c79FAULTING_THREAD: 00000ab4FAILURE_BUCKET_ID: ACCESS_VIOLATION_msvcr90!_woutput_l+94cBUCKET_ID: ACCESS_VIOLATION_msvcr90!_woutput_l+94cFollowup: MachineOwner
当然不能定位到crt库里的函数的代码行,只能定位到调用crt库函数的代码行_stprintf(sztestBuf,_T("%s"),d);
为什么会崩溃啊
比如我在函数
void cmyclass::test()
{
TCHAR sztestBuf[56] = { 0 };
int d=20;
_stprintf(sztestBuf,_T("%s"),d);
}按道理应该是可以定位到test函数的啊,但现在定位不到呢。如果连test函数都定位不到,那分析dump文件根本就没意义了嘛。
符号文件目录是否设置正确已经符号文件本身是否正确?
我用crashrpt,能正确定位到出错行
这句本来就有问题吧,s改成d。如果是s,编译器以为d是某个字符串的首地址,但是你的d值为20,作为地址来使用的话可不就访问越界了。
我也是使用crashreport生成dump文件的,我设置的符号文件路径如下:
SRV*c:\temp*http://msdl.microsoft.com/download/symbols;D:\pdbd:\pdb是我自己的pdb文件存放路径,主页设置没问题吧??请指教!
00680063 00000000 00000000 00000000 00000000 0x0我自己写了测试程序也可以定位到错误的,因为发布的程序动态库比较多,不知道为什么用 !analyze -v分析堆栈就像上面这样了。哪位高手指点下啊。