10

一个很简单的情况。我正在开发 Delphi 2007 中的应用程序,该应用程序通常编译为“Release”,但仍在调试器下运行。偶尔它也会在 SilkTest 下运行,用于回归测试。虽然这很有趣,但我想做一些特别的事情......

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

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

4

4 回答 4

11

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

查看本文以了解代码使用情况。

除了IsDebuggerPresentand之外CheckRemoteDebuggerPresent,还可以查询PEB.BeingDebugged(PEB是Process Environment Block,要得到PEB必须查询TEB,也就是Thread Enviroment Block)。

于 2009-09-18T10:11:45.507 回答
4

您可能正在寻找该IsDebuggerPresent功能。

于 2009-09-18T08:45:05.863 回答
1

要检测 SilkTest,您可以尝试附加到仅由 SilkTest 使用的 DLL 以检测其存在。例如,如果 Open Agent 附加到进程,Win32HookDll_x86.dll或者将出现(使用Process ExplorerWin32HookDll_amd64.dll之类的工具可以轻松找到名称。

于 2011-09-20T08:19:35.777 回答
-1

你也可以做

if DebugHook <> 0 then ...
于 2009-09-18T09:38:52.893 回答