2009-06-29 25 views

Respuesta

3

Responda mi propia pregunta.

uses System.Diagnostics; 

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

funciona bien para mí.

Adiós.

4

La llamada WinAPI de IsDebuggerPresent().

+0

esto no es realmente una respuesta a la pregunta, sin embargo, como ejecutar la aplicación en Delphi y ejecutarlo bajo cualquier otro depurador no se puede distinguir de esta manera. Tal vez eso no es importante para el OP, pero la pregunta debería haber sido formulada de otra manera. También hay Debugger.IsAttached en System.Diagnostics, no es necesario llamar a la API de Windows. – mghie

2

Algo así como:

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

podrían ser adecuadas.

+0

Alister, DebugHook no existe en "Delphi 2007.Net", así que busque alguna alternativa. – RRUZ

+0

Bueno, estaba buscando cómo hacer exactamente lo mismo que OP ... pero en Delphi 5. Así que, naturalmente, esto funcionó perfectamente para mí. :) +1 –

+0

Esto funciona en Delphi 7 ;-) – NetVicious

0

que consideran que esta respuesta más general, desde embarcadero

Uso IsDebuggerPresent() la llamada API de Windows. Ejemplo en C++:

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

La unidad JEDI JclDebug.pas contiene lo siguiente:

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 pregunta es preguntar específicamente por el depurador "Delphi 2007.net", no cualquier depurador. –

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

Esto no le dice si se está ejecutando bajo el depurador. Simplemente le dice si DEBUG se definió en el momento de la compilación. Así que has publicado una respuesta totalmente incorrecta a una pregunta de 6 años que ya tenía múltiples respuestas correctas. –

Cuestiones relacionadas