Is there any way of detecting that a debugger is running in memory?
and here comes the on Form Load pseudocode.
if debugger.IsRunning then
Application.exit
end if
Edit: The original title was "Detecting an in memory debugger"
From the main menu, select Run | Debugging Actions | Reload Changed Classes.
To run a program in a debuggerClick the Image File tab. In the Image box, type the name of an executable file or DLL, including the file name extension,and then press the TAB key. This activates the check boxes on the Image File tab. Click the Debugger check box to select it.
Try the following
if ( System.Diagnostics.Debugger.IsAttached ) {
...
}
Two things to keep in mind before using this to close an application running in the debugger:
Now, to be of more use, here's how to use this detection to keep func eval in the debugger from changing your program state if you have a cache a lazily evaluated property for performance reasons.
private object _calculatedProperty;
public object SomeCalculatedProperty
{
get
{
if (_calculatedProperty == null)
{
object property = /*calculate property*/;
if (System.Diagnostics.Debugger.IsAttached)
return property;
_calculatedProperty = property;
}
return _calculatedProperty;
}
}
I've also used this variant at times to ensure my debugger step-through doesn't skip the evaluation:
private object _calculatedProperty;
public object SomeCalculatedProperty
{
get
{
bool debuggerAttached = System.Diagnostics.Debugger.IsAttached;
if (_calculatedProperty == null || debuggerAttached)
{
object property = /*calculate property*/;
if (debuggerAttached)
return property;
_calculatedProperty = property;
}
return _calculatedProperty;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With