Understanding running code.
WHAT A DEBUGGER PROVIDES
Pausing execution at a chosen point Inspecting every value Stepping through line by line Examining the call stack
WHY IT BEATS PRINTING VALUES
It shows everything, without modifying code, and lets you explore.
WHAT TO LEARN
Setting breakpoints, including conditional ones Stepping into, over and out of calls Inspecting the stack Watching expressions
WHAT CONDITIONAL BREAKPOINTS SOLVE
Pausing only when a specific condition holds, in a loop running thousands of times.
WHAT A PROFILER PROVIDES
Where time is actually spent Where memory is allocated How often functions are called
WHY THAT MATTERS
People consistently guess wrongly about where time goes.
WHAT TO DO BEFORE OPTIMISING ANYTHING
Profile.
WHAT TO LOOK FOR
The largest contributor, which is usually a small part of the code.
WHAT TO MEASURE AFTERWARDS
Whether the change actually helped.
WHAT TO PROFILE ON
Conditions resembling production, with realistic data.
WHY
Small test data hides the problems that appear at scale.