加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi应用程序在调试器外部崩溃,但不在内部

发布时间:2020-12-15 09:24:35 所属栏目:大数据 来源:网络整理
导读:我们的DUnit项目在退出时崩溃.如果“Run Without Debugging”,它会崩溃,但如果我在调试器内部运行则不会崩溃. 如果我在启动它之后将调试器附加到进程,它在退出时不会崩溃. 我在最终确定时遇到了问题,因此我将打印语句放在我怀疑运行的所有完成代码中.这没什
我们的DUnit项目在退出时崩溃.如果“Run Without Debugging”,它会崩溃,但如果我在调试器内部运行则不会崩溃.

如果我在启动它之后将调试器附加到进程,它在退出时不会崩溃.

我在最终确定时遇到了问题,因此我将打印语句放在我怀疑运行的所有完成代码中.这没什么用.我们的一个低级单元的终结(不依赖于任何非系统单元)正在正确运行.所以它仍然可以最终确定,但可能不是.

崩溃产生了这个对话框:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: MCLTesting.exe
  Application Version:  0.0.0.0
  Application Timestamp:    4eb07b50
  Fault Module Name:    kernel32.dll
  Fault Module Version: 6.0.6001.18215
  Fault Module Timestamp:   49953395
  Exception Code:   c0000005
  Exception Offset: 000bf395
  OS Version:   6.0.6001.2.1.0.256.6
  Locale ID:    3081
  Additional Information 1: b37c
  Additional Information 2: 2a7328d8bb40c81c93b4b5f46adb8e10
  Additional Information 3: b37c
  Additional Information 4: 2a7328d8bb40c81c93b4b5f46adb8e10

“例外代码:c0000005”这是否意味着什么?

我的主要线索是它不会在调试器中崩溃.以前有人见过吗?

解决方法

我终于找到了这个.

问题确实在于终结者.终结器中抛出了用户异常.异常未被捕获,异常本身被泄露(异常及其字符串未被释放).这个内存泄漏似乎导致了崩溃?我不确定为什么我最初发布时没有注意到这个内存泄漏.

捕获异常修复了崩溃问题.

我发现一件有趣的事情是,即使在终结器中抛出未捕获的异常,后续单元的终结器仍将运行.我假设一个终结器中的问题会阻止所有后续的终结器运行.

我用来找到违规单位的方法非常简单;我从项目中删除了所有单元,然后逐个重新引入单元,直到遇到崩溃错误.耗费时间但最终有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读