【问题标题】:what does "BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL" mean in windbg !analyze -v output“BUGCHECK_STR:APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL”在windbg中是什么意思!分析-v输出
【发布时间】:2013-02-20 11:59:24
【问题描述】:

我尝试使用windbg分析故障转储文件,并键入扩展命令得到一些基本分析结果“!分析-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 的信息。

【问题讨论】:

  • 这是我从未见过的错误检查消息。
  • 嗯,这可能意味着你调用了一个带有空指针的类函数。 0xc0000005是访问冲突,地址是0x00000004。

标签: c++ debugging windbg crash-dumps


【解决方案1】:

“BUGCHECK_STR”是微软用来“分类”错误的一种分类,这个分类似乎表明你有一个 NULL 类指针——这对我来说似乎是正确的,因为从地址 4 读取的内存,这是距 NULL 指针基数的一个小偏移量。

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

如果您在崩溃时发布了更多的堆栈/寄存器值,则可能会更多地找出问题所在。

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

【讨论】:

  • 看反汇编代码“这里是哪里出错了”,很明显是传入的struct或者class出错了。 +4 是被访问的成员变量的偏移量,您可以在寄存器转储中看到eax 为零。在不理解代码的情况下,我不知道下一步该建议什么。可能是ein 内部的某个结构有问题。 &rc 只是一个指向局部变量的指针,对吧?
  • 不,局部变量的地址,在正常系统(Windows、Linux、MacOS、Symbian等)中永远不会是4。
猜你喜欢
  • 2011-01-13
  • 2012-10-15
  • 2011-02-11
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多