¿Cómo puedo detectar si mi aplicación se está ejecutando en el IDE "Delphi 2007 .Net", hay algo así como DebugHook?Detectar si mi aplicación se está ejecutando en el IDE "Delphi 2007 .Net"
Adiós.
¿Cómo puedo detectar si mi aplicación se está ejecutando en el IDE "Delphi 2007 .Net", hay algo así como DebugHook?Detectar si mi aplicación se está ejecutando en el IDE "Delphi 2007 .Net"
Adiós.
Responda mi propia pregunta.
uses System.Diagnostics;
function IDEDelphiNetRunning:Boolean;
Begin
Result:=Debugger.IsAttached;
End;
funciona bien para mí.
Adiós.
La llamada WinAPI de IsDebuggerPresent().
Algo así como:
Function IDEIsRunning : boolean;
begin
result := DebugHook <> 0;
end;
podrían ser adecuadas.
Alister, DebugHook no existe en "Delphi 2007.Net", así que busque alguna alternativa. – RRUZ
Bueno, estaba buscando cómo hacer exactamente lo mismo que OP ... pero en Delphi 5. Así que, naturalmente, esto funcionó perfectamente para mí. :) +1 –
Esto funciona en Delphi 7 ;-) – NetVicious
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";
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;
La pregunta es preguntar específicamente por el depurador "Delphi 2007.net", no cualquier depurador. –
function IsDebugMode():Boolean;
begin
Result:=False;
{$IFDEF DEBUG}
Result:=True;
{$ENDIF}
end;
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. –
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