【问题标题】:How to find out who's causing an access violation error?如何找出导致访问冲突错误的原因?
【发布时间】:2009-01-27 18:59:00
【问题描述】:

我收到报告说我的应用程序在某些 Vista 机器上导致了 GPF。错误信息是这样的:

在 0x75784062 的访问冲突(试图写入 0x00000006)

为了解决这个问题,我首先需要确切知道是谁导致了这个 GPF:我的主 exe、一些第三方组件、我自己的一个 activex 组件、一个 dll 等等......

我怎样才能找到这个?哪些工具可以查明导致这种混乱的确切模块?

任何帮助将不胜感激。

PS 我的应用程序是用 VB6 编写的,而我的 activex 控件是用 Delphi 2007 编写的。

【问题讨论】:

  • 你可以找到你的答案here,应该有一个“查找错误”功能可以帮助你定位问题

标签: delphi vb6 windows-vista crash access-violation


【解决方案1】:

我的建议是尝试 MadExcept link text 或 Eurekalog link text。它们捕获未处理的异常并在问题发生时生成堆栈转储。

除了作为满意的客户外,没有其他链接。 MadExcept 使我能够追踪并消除程序中一些非常罕见的问题。

【讨论】:

  • 呸!在球门线上被击败 ;-)
  • 很好的建议,虽然我想知道它是否适用于这种情况。应用程序是 VB6,只有应用程序中使用的 ActiveX 控件是用 Delphi 编写的。
  • 从错误信息的大致轮廓来看,它听起来不像是导致错误的 VB6 部分。我办公室里从事 VB6 工作的人说,创建这个错误非常棘手(但并非不可能)。无论如何,我认为尽可能多地尝试捕获/处理总是更好。
【解决方案2】:

我会推荐某种 Exception-hook,例如 EurekalogmadExcept,当异常发生时,它会为您提供一个很好的调用堆栈。

现在这对你有很大帮助,当然...

我对“查找错误”对话框没有任何帮助。一般来说,一致的失败案例和大量的步进是唯一/最快/最简单的解决方案。如果是未初始化的指针或已释放对象的情况,FastMM4 可能会帮助您进行正确的设置。

【讨论】:

  • eurekalog 本身就有问题 :) 去 madshi
【解决方案3】:

当程序崩溃时,Windows 应该保存一个crash dump。然后,您可以在 WinDbg 或在紧要关头的 Visual Studio 中加载它。有多种方法可以分析转储以找出问题所在。为了让您开始:

【讨论】:

  • 如果我得到一个 AV 但程序没有崩溃(所以没有 dmp 文件)怎么办?
【解决方案4】:

安装Debug Diag并监控您的应用程序,他会为您生成DUMP文件并进行分析。

【讨论】:

    【解决方案5】:

    您可以使用来自 SysInternals 站点的 Process Monitor 或 Process Explorer。

    【讨论】:

    • 如何使用它们?
    【解决方案6】:

    追踪 AV 可能很困难,因为真正的原因可能与异常实际发生的点不同。一些一般提示:

    1. 查看地址。 DLL(包括 ActiveX/OCX),加载在更高 地址,通常超过 0x50000000 (systemm DLL 通常位于 0x70000000 到 0x78000000)。看起来您的 AV 发生在 DLL 中。请记住,在最新版本的 Windows 地址空间加载随机化可以更改每次运行的地址
    2. 调用堆栈对于了解代码如何到达 AV 非常有价值。除了 EurekaLog 和 MadExcept,JCL/JVCL 库也可以用来获取这些信息。您可能需要使用更多调试信息(和映射文件)进行编译以获得有用的调用堆栈。
    3. Delphi 有一个转到地址调试功能,允许加载应用程序,在调试器中暂停它,然后跳转到一个地址。但它要求地址同时不改变(重新编译修改可能会改变地址,随机化也会这样做)。
    4. 如果错误在您的开发机器上无法复制,您可以尝试使用远程调试器来调试在另一台机器上运行的应用程序。

    【讨论】:

    • ASLR(地址空间加载随机化)是否适用?根据我的阅读,需要为您的应用程序显式启用它。
    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 2013-05-27
    • 2016-11-20
    • 2013-10-14
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多