我编写了一个代码,能够使用 map 文件生成自身的覆盖数据,而无需另一个应用程序对其进行调试,并且它还能够生成与 Cobertura 报告和 OpenCover 兼容的 xml 报告,以进行进一步分析和图形报告.
事情是,到目前为止,我必须调用函数来手动生成报告,而想法是在进程退出时自动生成报告。
我的第一个方法是尝试在 RtlExitUserProcess/RtlExitUserThread/ExitProcess 处编写 Hook ,但每个函数都涵盖一些特定情况,如果您强制进程结束(例如使用 taskkill 终止它)或使用 CTRL+ 关闭应用程序控制台窗口C 行为改变。
有什么方法可以创建一个可靠的回调,当应用程序即将结束时,该回调将始终被调用?就像当您调试另一个应用程序时,当进程终止时,您会收到包含详细信息的调试事件。
提前致谢
最佳答案
不,您不能 Hook 自己进程的终止。如果可以的话,那么恶意(或只是有缺陷的)程序可能会 Hook 它,然后拒绝继续终止。对于调试器来说这是不同的,因为调试器是一个单独的程序。
如果我编写您的程序,我只需将报告代码放入相关单元的finalization
部分即可。 Delphi RTL 将在程序关闭时调用它,通常按照单元初始化的相反顺序,这通常也是单元使用的顺序。在程序的早期使用您的分析单元,它将在终止序列的后期完成,从而使您能够捕获尽可能多的数据。
关于delphi - 进程终止回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615871/