2009-10-27 70 views
1

我正在调试一个间歇性问题,其中应用程序(使用Visual Studio 2005中的C++创建)出现故障。事件日志提供了以下信息:分析msvcr80.dll中的应用程序故障,故障地址0x00008aa0

faulting module msvcr80.dll 
version 8.0.50727.1433 
fault address 0x00008aa0 

我做了谷歌搜索,发现的应用与此特定错误地址轰然许多其他的例子,但没有意味着什么指示。

有没有什么办法找出msvcr80.dll在这个地址做了什么?

我尝试从Visual Studio附加到应用程序的运行实例,看看哪些代码位于0x00008aa0 - 但似乎没有任何东西!

更一般地说,给定一个Windows DLL中的某个地址,有没有办法找出代码在做什么?

+0

您是否尝试过隔离问题代码? – csl 2009-10-27 23:09:53

+0

感谢大家的回答。知道这可能是一个访问违规是绝对有用的。不幸的是,它是一个非常大的应用程序,并且崩溃是间歇性的,所以进一步隔离它将会非常耗时。 – russilwvong 2009-11-12 18:58:25

回答

1

Windows永远不会映射任何地址到低于0x10000的地址,所以你绝对AV'ing。

1

谷歌搜索自己,一个人在使用dependency walker找出哪些你使用模块,直接取决于MSVCR80.DLL建议 - 因为你正在使用VS 2005

这可能给你一个线索从哪里开始隔离错误。

1

解决这个问题通常表示空指针访问冲突。访问基址指针的成员访问的偏移量为8aa0。看起来像一个很大的物体。我建议你在取消引用大数据类型对象的指针时添加空断言。

0

您可以尝试使用Microsoft调试符号,在这种情况下您将看到正常的函数名称而不是地址。

在VS2005你应该做的:

  1. 选择工具 - >选项 - >调试 - >符号
  2. 插入http://msdl.microsoft.com/download/symbols作为一个符号位置
  3. 附加VS您的应用实例,并重复崩溃