Debugging native C++ uses compiler warnings, debug symbols, interactive debuggers (gdb/lldb), and sanitizers—essential when memory bugs do not show up as friendly stack traces like in Java.
Development habits
- Compile with
-g -Wall -Wextra - Run tests under AddressSanitizer and UBSan
- Use breakpoints and backtraces in gdb/lldb
- Reduce bug scope with logging via
std::cerr
Important interview questions and answers
- Q: Segfault causes?
A: Null dereference, use-after-free, buffer overflow—sanitizers and gdb pinpoint many cases. - Q: -g flag?
A: Embeds debug symbols mapping machine code to source lines.
Self-check
- What does AddressSanitizer detect?
- Why fix warnings before shipping?
Tip: Compile with -g -fsanitize=address,undefined during development—catches many lifetime bugs before production.
Interview prep
- AddressSanitizer detects?
Heap buffer overflows, use-after-free, double-free, and many memory errors in test builds.
- -g flag?
Embeds debug symbols for gdb/lldb to map machine code to source lines.