如何调试仅在应用程序关闭时发生的崩溃?(DELPHI)

Oli*_*sen 13 delphi crash debugging application-shutdown

因此,在最近的一些更改后,我们发现我们最老的应用程序之一有时会在关机时崩溃.这表现为"运行时错误216"消息的形式,或者来自Windows错误报告的消息,表明应用程序已停止工作.该应用程序已经OutputDebugString在每个回合发出消息,AFAICT我们自己的所有代码都正确执行完成.所有析构函数都被称为所有终结部分和类析构函数,其中没有一个会引发任何异常.

此外,madExcept和FastMM4的完全调试模式似乎都没有什么可抱怨的(尽管这可能是一个错误的结论,因为甚至在这些组件自己的终结代码运行之前就可能发生崩溃).

那么,你会做什么?你会从哪里开始的?


这个问题应该更多地关于这类问题的一般方法,而不是我目前面临的具体实例,所以我故意遗漏细节.请随意询问您是否认为它们可能与调试方法的选择相关,我稍后会添加它们.

Rit*_*tra 12

运行时错误216表示您具有Av(访问冲突),并且SysUtils已停止将这些错误转换为异常.

首先尝试:使用调试DCU构建并查看引发错误的单元系统,在那里设置断点.希望你能在调试器中捕获它并从那里开始工作.

您可能有一个内存错误(悬挂指针,空引用等等在已经完成的单元中使用s字符串常量),最好的方法是在sysutils完成后检查完成.您可以通过构建WITH debug dcu,将断点设置为sysutils中的finalization并开始逐步执​​行代码直到发生错误来完成此操作.


Mas*_*ler 5

你在使用运行时包吗?我以前见过类似的问题.如果要跨包边界共享全局变量或接口,则必须确保在卸载该包之前清除对属于某个包的类的所有引用; 否则他们会尝试将虚拟调用放入不再有效的内存中.

  • "现在已经完美运行了十多年"发生了什么变化?这可能就是我如何解决这个问题. (2认同)

Chr*_*ton 2

您可能遇到了指针问题。某些事件或方法试图在不再存在的对象上运行。