我编写了一个代码,能够使用地图文件生成自己的覆盖数据,无需另外的应用程序调试它,并且还能够生成与Cobertura报告和OpenCover兼容的xml报告,以便进一步分析和图形报告
事情是,到目前为止,我必须调用该函数手动生成报告,并且想法是在流程退出时自动生成报告。
我的第一种方法是尝试在RtlExitUserProcess / RtlExitUserThread / ExitProcess中编写钩子但是每个函数都包含一些特定的情况,如果你强制进程结束(例如使用taskkill终止它)或者用CTRL +关闭应用程序控制台窗口C行为发生了变化。
有什么方法可以创建一个可靠的回调,在应用程序即将结束时总会被调用?就像在调试另一个应用程序时一样,当进程终止时,您会收到一个包含详细信息的调试事件。
提前致谢
答案 0 :(得分:5)
不,你无法挂钩你自己的进程终止。如果可以,那么恶意(或只是错误的)程序可以挂钩它然后拒绝完成终止。它与调试器不同,因为调试器是一个单独的程序。
如果我正在撰写您的计划,我只需将报告代码放在相关单元的finalization
部分。当程序关闭时,Delphi RTL将调用它,通常以与单元初始化相反的顺序调用,这通常也是单位使用的顺序。在程序的早期使用您的分析单元,它将在终止序列的最后阶段完成,允许您捕获尽可能多的数据。