2009-06-29 10 views

Répondre

3

Répondez à ma question.

uses System.Diagnostics; 

function IDEDelphiNetRunning:Boolean; 
Begin 
Result:=Debugger.IsAttached; 
End; 

fonctionne très bien pour moi.

Salut.

4

L'appel WinAPI IsDebuggerPresent().

+0

Ce n'est pas vraiment une réponse à la question que, en exécutant l'application sous Delphi et l'exécuter sous n'importe quel autre débogueur ne peut pas être distingué de cette façon. Peut-être que ce n'est pas important pour le PO, mais la question aurait dû être formulée différemment alors. Il y a aussi Debugger.IsAttached dans System.Diagnostics, pas besoin d'appeler l'API Windows. – mghie

2

Quelque chose comme:

Function IDEIsRunning : boolean; 
begin 
    result := DebugHook <> 0; 
end; 

pourrait convenir.

+0

Alister, DebugHook n'existe pas dans "Delphi 2007.Net", alors cherchez une alternative. – RRUZ

+0

Eh bien, je cherchais comment faire exactement la même chose que OP ... mais dans Delphi 5. Donc, naturellement, cela a parfaitement fonctionné pour moi. :) +1 –

+0

Cela fonctionne sur Delphi 7 ;-) – NetVicious

0

Je trouve cette réponse plus générale, de embarcadero

Utilisez le appel IsDebuggerPresent() WinAPI. Exemple en C++:

if (IsDebuggerPresent()) 
    Label1->Caption = "debug"; 
else 
    Label1->Caption = "no debug"; 
2

L'unité JEDI JclDebug.pas contient les éléments suivants:

function IsDebuggerAttached: Boolean; 
var 
    IsDebuggerPresent: function: Boolean; stdcall; 
    KernelHandle: THandle; 
    P: Pointer; 
begin 
    KernelHandle := GetModuleHandle(kernel32); 
    @IsDebuggerPresent := GetProcAddress(KernelHandle, 'IsDebuggerPresent'); 
    if @IsDebuggerPresent <> nil then 
    begin 
    // Win98+/NT4+ 
    Result := IsDebuggerPresent 
    end 
    else 
    begin 
    // Win9x uses thunk pointer outside the module when under a debugger 
    P := GetProcAddress(KernelHandle, 'GetProcAddress'); 
    Result := DWORD(P) < KernelHandle; 
    end; 
end; 
+1

La question demande spécifiquement le débogueur "Delphi 2007.net", pas n'importe quel débogueur. –

-3
function IsDebugMode():Boolean; 
begin 
    Result:=False; 
{$IFDEF DEBUG} 
    Result:=True; 
{$ENDIF} 
end; 
+3

Cela ne vous dit pas si vous utilisez le débogueur. Il vous indique simplement si DEBUG a été défini au moment de la compilation. Donc, vous avez posté une réponse totalement incorrecte à une question de 6 ans qui avait déjà plusieurs réponses correctes existantes. –

Questions connexes