gdb
GDB debugger skill for C/C++ programs. Use when starting a GDB session, setting breakpoints, stepping through code, inspecting variables, debugging crashes, using reverse debugging (record/replay), remote debugging with gdbserver, or loading core dumps. Activates on queries about GDB commands, segfaults, hangs, watchpoints, conditional breakpoints, pretty-printers, Python GDB scripting, or multi-threaded debugging.
What this skill does
# GDB ## Purpose Walk agents through GDB sessions from first launch to advanced workflows: crash diagnosis, reverse debugging, remote debugging, and multi-thread inspection. ## Triggers - "My program segfaults / crashes — how do I debug it?" - "How do I set a breakpoint on condition X?" - "How do I inspect memory / variables in GDB?" - "How do I debug a remote embedded target?" - "GDB shows `??` frames / no source" - "How do I replay a bug deterministically?" (record/replay) ## Workflow ### 1. Prerequisite: compile with debug info Always compile with `-g` (GCC/Clang). Use `-Og` or `-O0` for most debuggable code. ```bash gcc -g -Og -o prog main.c ``` For release builds: use `-g -O2` and keep the binary with symbols (strip separately with `objcopy`). ### 2. Start GDB ```bash gdb ./prog # load binary gdb ./prog core # load with core dump gdb -p 12345 # attach to running process gdb --args ./prog arg1 arg2 # pass arguments gdb -batch -ex 'run' -ex 'bt' ./prog # non-interactive (CI) ``` ### 3. Essential commands | Command | Shortcut | Effect | |---------|----------|--------| | `run [args]` | `r` | Start the program | | `continue` | `c` | Resume after break | | `next` | `n` | Step over (source line) | | `step` | `s` | Step into | | `nexti` | `ni` | Step over (instruction) | | `stepi` | `si` | Step into (instruction) | | `finish` | | Run to end of current function | | `until N` | | Run to line N | | `return [val]` | | Force return from function | | `quit` | `q` | Exit GDB | ### 4. Breakpoints and watchpoints ```gdb break main # break at function break file.c:42 # break at line break *0x400abc # break at address break foo if x > 10 # conditional break tbreak foo # temporary breakpoint (fires once) rbreak ^mylib_.* # regex breakpoint on all matching functions watch x # watchpoint: break when x changes watch *(int*)0x601060 # watch memory address rwatch x # break when x is read awatch x # break on read or write info breakpoints # list all breakpoints delete 3 # delete breakpoint 3 disable 3 # disable without deleting enable 3 ``` ### 5. Inspect state ```gdb print x # print variable print/x x # print in hex print *ptr # dereference pointer print arr[0]@10 # print 10 elements of array display x # auto-print x on every stop undisplay 1 info locals # all local variables info args # function arguments info registers # all CPU registers info registers rip rsp rbp # specific registers x/10wx 0x7fff0000 # examine 10 words at address x/s 0x400abc # examine as string x/i $rip # examine current instruction backtrace # call stack (bt) bt full # bt + local vars frame 2 # switch to frame 2 up / down # move up/down the stack ``` ### 6. Multi-thread debugging ```gdb info threads # list threads thread 3 # switch to thread 3 thread apply all bt # backtrace all threads thread apply all bt full # full bt all threads set scheduler-locking on # pause other threads while stepping ``` ### 7. Reverse debugging (record/replay) Record requires `target record-full` or `target record-btrace` (Intel PT): ```gdb # Software record (slow but universal) record # start recording run # ... trigger the bug ... reverse-continue # go back to last break reverse-next # step backwards reverse-step reverse-finish # Intel Processor Trace (fast, hardware) target record-btrace pt run # view instruction history record instruction-history ``` ### 8. Remote debugging with gdbserver On target: ```bash gdbserver :1234 ./prog # Or attach: gdbserver :1234 --attach 5678 ``` On host: ```bash gdb ./prog (gdb) target remote 192.168.1.10:1234 (gdb) break main (gdb) continue ``` For cross-compilation: use `aarch64-linux-gnu-gdb` on the host. ### 9. Common problems | Symptom | Cause | Fix | |---------|-------|-----| | `No symbol table` | Binary not compiled with `-g` | Recompile with `-g` | | `??` frames in backtrace | Missing debug info or stack corruption | Install debuginfo package; check for stack smash | | `Cannot access memory at address` | Null dereference / freed memory | Check pointer before deref; use ASan | | `SIGABRT` in backtrace | `abort()` or assertion failure | Go up frames to find the assertion | | GDB hangs on `run` | Binary waiting for input | Redirect stdin: `run < /dev/null` | | Breakpoint in wrong place | Optimiser moved code | Compile with `-Og`; or use `nexti` | ### 10. GDB init file (~/.gdbinit) ```gdb set history save on set history size 1000 set print pretty on set print array on set print array-indexes on set pagination off set confirm off ``` For a command cheatsheet, see [references/cheatsheet.md](references/cheatsheet.md). For pretty-printers and Python scripting, see [references/scripting.md](references/scripting.md). ## Related skills - Use `skills/debuggers/core-dumps` for loading core files - Use `skills/debuggers/lldb` for LLDB-based workflows - Use `skills/runtimes/sanitizers` to catch bugs before needing the debugger - Use `skills/compilers/gcc` for `-g` flag details
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.