| name | gdb-chat |
| description | Conversational GDB debugging for Breenix kernel. Use for interactive debugging sessions - set breakpoints, inspect registers, examine memory, step through code, investigate crashes. |
Breenix GDB Chat
Conversational GDB debugging interface for Breenix kernel development.
When to Use This Skill
Use this skill when you need interactive, stateful GDB debugging:
- Investigating crashes, page faults, or exceptions
- Stepping through syscall execution
- Examining register state at specific points
- Setting breakpoints and watchpoints
- Analyzing memory contents
- Tracing context switches
Quick Reference
breenix-gdb-chat/scripts/start_session.py
breenix-gdb-chat/scripts/gdb_cmd.py --session SESSION_ID --command "info registers"
breenix-gdb-chat/scripts/gdb_cmd.py --session SESSION_ID -c "break main" -c "continue"
breenix-gdb-chat/scripts/stop_session.py --session SESSION_ID
breenix-gdb-chat/scripts/list_sessions.py
Workflow Example
Investigating a Page Fault
$ breenix-gdb-chat/scripts/start_session.py
{"session_id": "gdb_20251204_151030", "status": "connected"}
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
--command "break page_fault_handler"
{"success": true, "output": "Breakpoint 1 at 0xffffffff80003450"}
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
--command "continue"
{"success": true, "output": "Breakpoint 1, page_fault_handler()"}
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
--command "print/x \$cr2"
{"success": true, "output": "0x0000000000000008"}
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
--command "backtrace"
{"success": true, "output": [{"function": "page_fault_handler", ...}]}
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
-c "frame 1" -c "info locals"
$ breenix-gdb-chat/scripts/stop_session.py --session gdb_20251204_151030
Available Commands
Execution Control
| Command | Description |
|---|
continue / c | Continue execution |
step / s | Step one source line |
stepi / si | Step one instruction |
next / n | Step over function calls |
nexti / ni | Step over one instruction |
finish | Run until function returns |
Breakpoints
| Command | Description |
|---|
break LOCATION | Set breakpoint (function, file:line, *address) |
hbreak LOCATION | Hardware breakpoint (works before paging) |
tbreak LOCATION | Temporary breakpoint (deletes after hit) |
watch EXPR | Break when memory is written |
rwatch EXPR | Break when memory is read |
info breakpoints | List all breakpoints |
delete N | Delete breakpoint N |
Registers
| Command | Description |
|---|
info registers | Show general-purpose registers |
print/x $REG | Show specific register (e.g., $rip, $rax) |
print/x $cr2 | Page fault address |
print/x $cr3 | Current page table |
show-segments | Show segment registers (custom) |
show-control | Show control registers (custom) |
Memory
| Command | Description |
|---|
x/Nxg ADDR | Examine N 8-byte values at ADDR |
x/Nxw ADDR | Examine N 4-byte values |
x/Ni ADDR | Disassemble N instructions |
x/s ADDR | Show string at ADDR |
disassemble | Disassemble current function |
disassemble FUNC | Disassemble specific function |
Stack & Frames
| Command | Description |
|---|
backtrace / bt | Show call stack |
backtrace full | Show stack with locals |
frame N | Select frame N |
info locals | Show local variables |
info args | Show function arguments |
Kernel-Specific Tips
Page Fault Investigation
--command "print/x \$cr2"
--command "print/x \$rip"
--command "x/i \$rip"
--command "backtrace"
Syscall Debugging
--command "break rust_syscall_handler"
--command "continue"
--command "print/x \$rax"
--command "print/x \$rdi"
--command "step"
Timer/Interrupt Analysis
--command "break timer_interrupt_handler"
--command "continue"
--command "info registers"
--command "finish"
Context Switch Tracing
--command "break check_need_resched_and_switch"
--command "continue"
--command "info locals"
Script Options
start_session.py
--mode uefi|bios Boot mode (default: uefi)
--timeout SECONDS Session timeout (default: 300)
--kernel PATH Kernel binary path (auto-detected)
--debug Print debug output
gdb_cmd.py
--session ID Session ID (required)
--command CMD GDB command (can specify multiple with -c)
--timeout SECONDS Command timeout (default: 30)
--format json|text Output format (default: json)
stop_session.py
--session ID Session ID (required)
--force Force kill without cleanup
list_sessions.py
--format json|text Output format (default: json)
--cleanup Remove dead sessions
Session State
Sessions are stored in /tmp/breenix_gdb_sessions/:
SESSION_ID.json - Session metadata
SESSION_ID.log - GDB command log
SESSION_ID.qemu.log - QEMU output
Troubleshooting
Session not found
breenix-gdb-chat/scripts/list_sessions.py
breenix-gdb-chat/scripts/list_sessions.py --cleanup
breenix-gdb-chat/scripts/start_session.py
Command timeout
The target may be hung. Try:
breenix-gdb-chat/scripts/stop_session.py --session ID --force
breenix-gdb-chat/scripts/start_session.py
Cannot connect to QEMU
Check QEMU started correctly:
cat /tmp/breenix_gdb_sessions/SESSION_ID.qemu.log