Delphi - 诊断App Closure上的访问冲突

时间:2014-12-01 13:57:26

标签: delphi debugging access-violation

Delphi XE6 - 我正在使用Add-In Express为MS Excel编写一个plugIn。我一直在研究这个问题,项目一直很稳定。我最近做了几处修改,现在遇到了问题。当我运行Excel时,我的插件被加载。我加载Excel电子表格,然后立即退出。我现在看到调试器通知。

Project EXCEL.EXE raised exception class $C0000005 with message 'access violation at 0x2a5014ca: read o address 0x00000005'.

我所做的更改基本上只是将一些全局变量移动到它自己的单元中,然后让我取出一些依赖项(即我能够从UNIT子句中删除我自己的一些文件。)我做了一个完整的构建,编译器没有抱怨,所以它找到变量OK。

我尝试找出问题做了什么?

  1. 当我收到调试器通知时,我已经完成了BREAK。不幸的是,这会让我进入CPU视图,我看到的只是汇编程序。我无法从中识别出我的代码的哪一部分被调用。

  2. 我已启用MadExcept,但启动Excel时会立即出现堆栈溢出。我已经将堆栈大小从1 MB提高到2 MB,但我仍然遇到堆栈溢出。

  3. 我已将AQTime分析器设置为分配并尝试“运行分析”。当我这样做时,Delphi挂起,Windows重新启动它。我也得到了与其他AQTime分析器相同的行为。

  4. 我已尝试在初始化和最终化例程上注释掉我的启动代码。

  5. 另外一点,我在我的启动代码和终结代码中设置了一个断点。 (我的意思是.pas文件中的关键字,而不是通用的启动和关闭部分)。调试器在Initilization例程停止。当我关闭Excel时,我希望调试器停止在Finalization代码上,但它没有。我不知道这是否意味着错误发生在这一点之前(但是在告诉Excel关闭和调用Finalization之间不应该运行任何代码)或者它是否意味着调试器无法捕获点...?

    除了回到以前版本的代码之外,我还能检查什么?如何查看产生错误的原因?

    这是我看到的调用堆栈。 enter image description here

0 个答案:

没有答案