【问题标题】:Analyzing application fault in msvcr80.dll, fault address 0x00008aa0分析msvcr80.dll中的应用程序故障,故障地址0x00008aa0
【发布时间】:2009-10-27 22:59:32
【问题描述】:

我正在调试一个应用程序(在 Visual Studio 2005 中使用 C++ 创建)出现故障的间歇性问题。事件日志提供以下信息:

faulting module msvcr80.dll
version 8.0.50727.1433
fault address 0x00008aa0

我在 Google 上进行了搜索,发现了许多其他应用程序因该特定故障地址而崩溃的示例,但没有说明其含义。

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

我尝试从 Visual Studio 附加到正在运行的应用程序实例,以查看位于 0x00008aa0 的代码 - 但那里似乎没有任何内容!

更一般地说,给定 Windows DLL 中某处的地址,有没有办法弄清楚代码在做什么?

【问题讨论】:

  • 你试过隔离问题代码吗?
  • 感谢大家的回答。知道这很可能是访问冲突绝对是有帮助的。不幸的是,这是一个相当大的应用程序,并且崩溃是间歇性的,因此进一步隔离它会很耗时。

标签: windows debugging visual-c++ dll crash


【解决方案1】:

Windows 永远不会将任何内容映射到低于 0x10000 的地址,所以你肯定是在 AV'ing。

【讨论】:

    【解决方案2】:

    我自己用谷歌搜索,有人建议使用dependency walker 来找出你正在使用的模块,它直接依赖于 msvcr80.dll——因为你使用的是 VS 2005。

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

    【讨论】:

      【解决方案3】:

      这个低地址通常表示一个空指针访问冲突。访问基指针的成员访问的偏移量是 8aa0。看起来像一个相当大的物体。我建议您在取消引用指向大数据类型对象的指针时添加空断言。

      【讨论】:

        【解决方案4】:

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

        在 VS2005 中你应该这样做:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-08
          • 1970-01-01
          • 2016-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多