2009-06-29 10 views

Odpowiedz

3

Odpowiedz na własne pytanie.

uses System.Diagnostics; 

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

działa dobrze dla mnie.

Pa.

4

Wywołanie IsAPebuggerPresent() WinAPI.

+0

To naprawdę nie jest odpowiedź na pytanie, choć, jak uruchomieniu aplikacji pod Delphi i uruchamianie go pod jakimkolwiek innym debuggerem nie może być odróżniane w ten sposób. Może to nie jest ważne dla PO, ale pytanie powinno być wtedy inaczej sformułowane. Również istnieje Debugger.IsAttached w System.Diagnostics, nie trzeba wywoływać Windows API. – mghie

2

Coś jak:

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

Might garnitur.

+0

Alister, DebugHook nie istnieje w "Delphi 2007.Net", więc poszukaj jakiejś alternatywy. – RRUZ

+0

Cóż, szukałem, jak zrobić dokładnie to samo, co OP ... ale w Delphi 5. Więc naturalnie to działało idealnie dla mnie. :) +1 –

+0

To działa na Delphi 7 ;-) – NetVicious

0

znalazłem to bardziej ogólną odpowiedź, z embarcadero

Użyj połączeń IsDebuggerPresent() WinAPI. Przykład w C++:

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

Jednostka JEDI JclDebug.pas zawiera następujące elementy:

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

Pytanie dotyczy konkretnie debuggera "Delphi 2007.net", a nie tylko jakiegokolwiek debuggera. –

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

To nie mówi, czy używasz debuggera. Po prostu powie Ci, czy DEBUG został zdefiniowany podczas kompilacji. W związku z tym opublikowałeś całkowicie niepoprawną odpowiedź na 6-letnie pytanie, które już zawiera kilka prawidłowych odpowiedzi. –