一个非常简单的情况。我正在使用Delphi 2007中的应用程序,该应用程序通常被编译为“发行版”,但仍在调试器下运行。有时它也将在SilkTest下运行,以进行回归测试。虽然这很有趣,但我想做一些特别的事情...

我想检测我的应用程序是否在调试器/回归测试器中运行,如果是这种情况,我希望应用程序知道使用了哪种工具! (因此,当应用程序崩溃时,我可以在错误报告中报告此信息。)

有什么建议,解决方案吗?

最佳答案

您可以检查启动您的应用程序的父进程。
使用CreateToolhelp32Snapshot/Process32First/Process32Next获取您的应用程序PID的父PID(PROCESSENTRY32.th32ParentProcessIDTProcessEntry32.th32ParentProcessID)。然后获取父PID的文件名,以与要检查的应用程序进行比较,例如SilkTest。

检查this article的代码使用情况。

除了IsDebuggerPresentCheckRemoteDebuggerPresent之外,您还可以查询PEB.BeingDebugged(PEB是进程环境块,要获取PEB,您必须查询TEB,即线程环境块)。

10-08 01:19