返回 Skill 列表
extension
分类: 开发与工程无需 API Key

gdb-chat

用于Breenix内核的会话式GDB调试。可用于交互式调试会话 - 设置断点、检查寄存器、查看内存、逐行执行代码、调查崩溃原因。

person作者: jakexiaohubgithub

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

# Start a debug session
breenix-gdb-chat/scripts/start_session.py

# Execute GDB commands
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"

# Stop session
breenix-gdb-chat/scripts/stop_session.py --session SESSION_ID

# List active sessions
breenix-gdb-chat/scripts/list_sessions.py

Workflow Example

Investigating a Page Fault

# 1. Start session
$ breenix-gdb-chat/scripts/start_session.py
{"session_id": "gdb_20251204_151030", "status": "connected"}

# 2. Set breakpoint
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
    --command "break page_fault_handler"
{"success": true, "output": "Breakpoint 1 at 0xffffffff80003450"}

# 3. Continue to breakpoint
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
    --command "continue"
{"success": true, "output": "Breakpoint 1, page_fault_handler()"}

# 4. Check faulting address (CR2)
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
    --command "print/x \$cr2"
{"success": true, "output": "0x0000000000000008"}

# 5. Get backtrace
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
    --command "backtrace"
{"success": true, "output": [{"function": "page_fault_handler", ...}]}

# 6. Check local variables
$ breenix-gdb-chat/scripts/gdb_cmd.py --session gdb_20251204_151030 \
    -c "frame 1" -c "info locals"

# 7. Stop session
$ 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"     # Faulting address
--command "print/x \$rip"     # Faulting instruction
--command "x/i \$rip"         # Show faulting instruction
--command "backtrace"         # Call stack

Syscall Debugging

--command "break rust_syscall_handler"
--command "continue"
--command "print/x \$rax"     # Syscall number
--command "print/x \$rdi"     # First argument
--command "step"              # Step into handler

Timer/Interrupt Analysis

--command "break timer_interrupt_handler"
--command "continue"
--command "info registers"    # See state at interrupt
--command "finish"            # Complete handler

Context Switch Tracing

--command "break check_need_resched_and_switch"
--command "continue"
--command "info locals"       # See scheduler state

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

# List all sessions
breenix-gdb-chat/scripts/list_sessions.py

# Clean up dead sessions
breenix-gdb-chat/scripts/list_sessions.py --cleanup

# Start fresh session
breenix-gdb-chat/scripts/start_session.py

Command timeout

The target may be hung. Try:

# Force stop and restart
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