Most developers smash F5, F9 and F10 or click the buttons that are far left that you need to swipe your mouse twice to reach.
But what if I told you you’re only scratching the surface of what morden debuggers can do?
There’s a whole toolbox (or 3 which I going to cover) of smarter breakpoints that can save your time if you learn how to use them.
Let’s break them down. (Pun intended.)
The Basic Breakpoint
Let’s get this out of the way.
You set it up on a line, the execution stops, you inspect stuff.
It works, until your app loops 999 times or you’re tracing something that happens sometimes under some condition. That’s when the basic Breakpoint becomes… basic.
Conditional Breakpoint
Break only when a condition is met.
Perfect when you’re debugging a loop but only care when i == 998
.
So, no more pushing debug lines to the PR like this anymore:
if (i == 998) Console.WriteLine(x);
Instead, right click on your breakpoint or the breakpoint pane -> “Condition”-> i == 998
. And boom. It’ll pause only when it matters.
Tracepoint / Logpoint
Print without pausing.
Sometimes you want to see what’s happening, but stopping the program ruins the flow. That’s where tracepoints come in.
Log values, hit counts, or custom messages straight from the debugger, no debug code is required.
Let’s say, you’re debugging a race condition or async code. A normal breakpoint ruins it. A tracepoint observes silently.
Temporary Breakpoint
Trigger once, then disappear.
Ideal when you’re checking a one-time setup or a rare code path.
Why spam breakpoints or logs and keep cleaning up later? This one is deleted once the breakpoint is hit.
Just right click and mark it temporary.
Dependent Breakpoint
Break only after another one fires.
Let’s say, you have a multi-step validation process where you only care about your breakpoint when a particular breakpoint is also hit.
Instead of manually tracking that, you cane make a breakpoint dependent on another breakpoint.
Data Breakpoint / Watchpoint
Triggers on field/property write or read operations. Useful when the output is wrong but you suspect that something else is also changing the property or field.
This type may not be available on all.
Debugger didn’t stop there, but it’s a start and knowing these exists can help you do your job a lot let less harder.
Stay Curious. Adios 👋