什么是“BUGCHECK_STR:APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL”在windbg中的意思!分析-v输出

时间:2013-02-20 11:59:25

标签: c++ debugging windbg crash-dumps

我尝试使用windbg分析崩溃转储文件,并输入扩展命令以获得一些基本的分析结果“!analyze -v”,并得到如下结果: - (我这里只粘贴部分信息)

....
  ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 00000004
Attempt to read from address 00000004

PROCESS_NAME:  tscommand.exe

...

LAST_CONTROL_TRANSFER:  from 010444c2 to 010181e6

FAULTING_THREAD:  00002270

BUGCHECK_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL

PRIMARY_PROBLEM_CLASS:  NULL_CLASS_PTR_READ_AFTER_CALL

DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_READ_AFTER_CALL

STACK_TEXT:  

...

“BUGCHECK_STR:APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL”在这里是什么意思?这是否意味着应用程序因调用函数后的NULL类指针而出错?我在网上搜索,找不到有关APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL的任何信息。

1 个答案:

答案 0 :(得分:2)

“BUGCHECK_STR”是Microsoft用来“分类”错误的分类,这个似乎表明你有一个NULL类指针 - 这似乎对我来说是正确的,因为内存读取来自地址4,这是一个远离NULL指针基址的小偏移。

基本上,你遇到的情况是使用指向某事物的指针(我不是100%确定它是一个类),并且当你取消引用它时指针是NULL。完全有可能这是由对成员函数的调用引起的,并且调试器可以[通过查看调用堆栈,符号和寄存器值的组合]来解决这个问题,但是WinDBG获取这些东西并不是未知的。不时出错 - 这是启发式的,所以它就像“如果我们在这里有这个值,那个值和其他东西匹配这个范围,那就是这组错误”。

如果您在崩溃时发布了更多的堆栈/寄存器值,那么可能会更多地了解出现了什么问题。

错误代码和额外数据与错误的组合可以肯定的是,您的代码正在读取内存中的地址4。这通常意味着尝试在“NULL”指向的类/结构中使用第二个整数或浮点数。当我在代码中忘记了“if(ptr!= NULL)...”时,我已经看过几次。不时发生在我们大多数人身上......