2009-06-29 2 views

Antwort

3

Beantworten Sie meine eigene Frage.

uses System.Diagnostics; 

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

funktioniert gut für mich.

Tschüss.

4

Der IsDebuggerPresent() WinAPI-Aufruf.

+0

Das ist nicht wirklich eine Antwort auf die Frage aber, wie die Anwendung unter Delphi läuft und das Ausführen unter einem anderen Debugger kann auf diese Weise nicht unterschieden werden. Vielleicht ist das für das OP nicht wichtig, aber die Frage hätte anders formuliert werden müssen. Auch gibt es Debugger.IsAttached in System.Diagnostics, keine Notwendigkeit, die Windows-API aufzurufen. – mghie

2

Etwas wie:

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

passen könnte.

+0

Alister, DebugHook existiert nicht in "Delphi 2007.Net", suchen Sie nach einer Alternative. – RRUZ

+0

Nun, ich war auf der Suche nach genau dem gleichen Verfahren wie OP ... aber in Delphi 5. Das hat natürlich perfekt für mich funktioniert. :) +1 –

+0

Dies funktioniert auf Delphi 7 ;-) – NetVicious

0

fand ich diese allgemeinere Antwort von embarcadero

Verwenden Sie den IsDebuggerPresent() WinAPI Anruf. Beispiel in C++:

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

Die JEDI JclDebug.pas Einheit enthält folgende Komponenten:

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

Die Frage ist speziell für die "Delphi 2007.net" Debugger, nicht nur Debugger. –

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

Dies sagt Ihnen nicht, ob Sie unter dem Debugger laufen. Es sagt Ihnen einfach, ob DEBUG zum Zeitpunkt der Kompilierung definiert wurde. Sie haben also eine völlig falsche Antwort auf eine 6 Jahre alte Frage gepostet, bei der bereits mehrere richtige Antworten vorhanden waren. –

Verwandte Themen