Domanda

Una situazione molto semplice. Sto lavorando a un'applicazione in Delphi 2007 che viene spesso compilata come "Release" ma funziona ancora con un debugger. E occasionalmente funzionerà anche con SilkTest, per i test di regressione. Mentre è abbastanza divertente, voglio fare qualcosa di speciale ...

Voglio rilevare se la mia applicazione è in esecuzione all'interno di un debugger / regression-tester e, in tal caso, voglio che l'applicazione sappia quale strumento viene utilizzato! (Quindi, quando l'applicazione si arresta in modo anomalo, potrei riportare queste informazioni nella sua segnalazione di errore.)

Qualche suggerimento, soluzione?

È stato utile?

Soluzione

È possibile verificare il processo padre che ha avviato l'applicazione. Con CreateToolhelp32Snapshot / Process32First / Process32Next ottieni il PID principale ( PROCESSENTRY32.th32ParentProcessID o TProcessEntry32.th32ParentProcessID ) per il PID dell'applicazione. Quindi ottenere il nome file per il PID padre da confrontare con le applicazioni che si desidera verificare, come SilkTest.

Controlla questo articolo per l'utilizzo del codice.

Oltre a IsDebuggerPresent e CheckRemoteDebuggerPresent , puoi anche eseguire una query su PEB.BeingDebugged (PEB è Process Environment Block, per ottenere PEB è necessario query TEB, che è il Thread Enviroment Block).

Altri suggerimenti

Probabilmente stai cercando il IsDebuggerPresent .

Per rilevare SilkTest, è possibile provare a collegarsi a una DLL utilizzata solo da SilkTest per rilevarne la presenza. Ad esempio, se Open Agent è collegato a un processo, saranno presenti Win32HookDll_x86.dll o Win32HookDll_amd64.dll (i nomi possono essere facilmente individuati con uno strumento come < a href = "http://technet.microsoft.com/en-us/sysinternals/bb896653" rel = "nofollow" title = "Process Explorer"> Process Explorer .

Puoi anche fare

if DebugHook <> 0 then ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top