El miembro de .NET Framework que se asemeja a IsDebuggerPresent()
el más obvio es Debugger.IsAttached
, pero sus mecanismos internos son completamente diferentes, al igual que obras de manera muy diferente de lo simple OutputDebugString
.
Debugger.IsAttached
pide el CLR para detectar la presencia de un depurador logrado adjunto, y ni siquiera se molesta en verificar la presencia de un depurador nativo .
IsDebuggerPresent()
pregunta al kernel por la presencia de un depurador nativo adjunto, y no tiene ningún conocimiento de los depuradores gestionados en absoluto.
A partir de Visual Studio 2013, el depurador administrado se construye en la parte superior de un depurador nativo, por lo tanto IsDebuggerPresent()
y Debugger.IsAttached
debe devolver verdadero al depurar una aplicación administrada bajo VS. Pero si conecta Visual Studio a una aplicación administrada y anula explícitamente el tipo de código a native, IsDebuggerPresent()
devolverá true, mientras que Debugger.IsAttached
aún devuelve false.
Al final, todo se reduce a lo que está tratando de lograr.
¿Qué quieres hacer? –
'#if debug' ??? – SpaceBison
Mostrar solo algunos botones cuando se ejecuta en el depurador. # si la depuración funcionaría En C++, preferí IsDebuggerPresent porque simplemente diferenciaba si un desarrollador lo estaba mirando o no (en versión o depuración). – noelicus