我们的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" 这是什么意思?
我唯一的线索就是它在调试器中没有崩溃。有人之前见过类似情况吗?
0xC0000005
是STATUS_ACCESS_VIOLATION
。这也可能是违反数据执行预防(DEP)导致的错误。MadExcept可能能够帮助跟踪它。它是免费供非商业使用(如果您可以在最终用户应用程序中使用它,则绝对值得购买),因此您可以将其用于调试此类问题。 - Ken White