gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:26:04 24 4
gpt4 key购买 nike

我们的 DUnit 项目在退出时崩溃。如果“运行而不进行调试”,它会崩溃,但如果我在调试器内运行,则不会崩溃。

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

我怀疑终结中存在问题,因此我将打印语句放入我怀疑正在运行的所有终结代码中。结果这并没有什么用处。我们的低级单元之一(不依赖于任何非系统单元)的最终确定运行正确。所以它仍然可能最终确定,但也可能不是。

崩溃会产生此对话框:

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”这意味着什么吗?

我得到的主要线索是它不会在调试器中崩溃。有人见过吗?

最佳答案

我终于找到了这个。

问题确实出在终结器中。终结器中引发了用户异常。异常未被捕获,并且异常本身被泄漏(异常及其字符串未被释放)。看来是内存泄漏导致了崩溃?我不知道为什么我最初发布时没有注意到这个内存泄漏。

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

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

我用来查找违规单位的方法非常简单;我从项目中删除了所有单元,然后一一重新引入单元,直到出现崩溃错误。虽然很费时间,但最终还是成功了。

关于Delphi 应用程序在调试器外部崩溃,但在内部不崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7974054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com