sungdb-mcp

sungdb-mcp

FastMCP-based GDB debugging server for high-performance, stable debugging with command queuing and session management.

Category
Visit Server

README

๐Ÿ”ง SungDB MCP Server

FastMCP ๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ GDB ๋””๋ฒ„๊น… ์„œ๋ฒ„

๊ธฐ์กด GDB MCP์˜ ๋™์ž‘ ๋ถˆ์•ˆ์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด FastMCP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ ์ƒˆ๋กœ์šด GDB MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ GDB ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ช…๋ น์„ ํ์ž‰ํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์•ˆ์ •์ ์ธ ๋””๋ฒ„๊น… ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿš€ FastMCP ๊ธฐ๋ฐ˜: ์ตœ์‹  FastMCP ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„๋œ ๊ณ ์„ฑ๋Šฅ ์„œ๋ฒ„
  • ๐Ÿ”„ ๋ช…๋ น ํ์ž‰: ๋ช…๋ น์–ด๋“ค์„ ํ์— ์ €์žฅํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰
  • ๐ŸŽฏ ์„ธ์…˜ ๊ด€๋ฆฌ: ์—ฌ๋Ÿฌ GDB ์„ธ์…˜์„ ๋™์‹œ์— ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • โšก ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: asyncio ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋ช…๋ น ์ฒ˜๋ฆฌ๋กœ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ
  • ๐Ÿ›ก๏ธ ์•ˆ์ •์„ฑ: pexpect๋ฅผ ํ™œ์šฉํ•œ ์•ˆ์ •์ ์ธ GDB ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ
  • ๐Ÿ” ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ: ๊ธฐ์กด GDB MCP์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๊ตฌํ˜„

๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.8+
  • Linux, macOS, Windows ์ง€์›
  • ์ตœ์†Œ 500MB ๋””์Šคํฌ ๊ณต๊ฐ„
  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ (ํŒจํ‚ค์ง€ ์„ค์น˜์šฉ)

ํ•„์ˆ˜ ํŒจํ‚ค์ง€

ARM ํฌ๋กœ์Šค ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ:

  • gdb-multiarch - ARM ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ํ•„์ˆ˜
  • gcc-arm-none-eabi - ARM GCC ํˆด์ฒด์ธ
  • Python ํŒจํ‚ค์ง€: fastmcp, pexpect, psutil

์ผ๋ฐ˜ ํ™˜๊ฒฝ:

  • gdb - ์‹œ์Šคํ…œ ๊ธฐ๋ณธ GDB
  • Python ํŒจํ‚ค์ง€: fastmcp, pexpect, psutil

ARM ๋””๋ฒ„๊น… ํ™˜๊ฒฝ ์„ค์ •

Ubuntu/Debian:

sudo apt update
sudo apt install -y gdb-multiarch gcc-arm-none-eabi

macOS:

brew install gdb arm-none-eabi-gdb

Windows:

๐Ÿ› ๏ธ ์„ค์น˜

์ž๋™ ์„ค์น˜ (๊ถŒ์žฅ)

cd sungdb-mcp
./install.sh

์ˆ˜๋™ ์„ค์น˜

cd sungdb-mcp

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
python3 -m venv venv
source venv/bin/activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install --upgrade pip
pip install -r requirements.txt

# ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -e .

๐Ÿš€ ์‚ฌ์šฉ๋ฒ•

1. ์„œ๋ฒ„ ์‹คํ–‰

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
source venv/bin/activate

# ์„œ๋ฒ„ ์‹คํ–‰
python sungdb_mcp.py
# ๋˜๋Š”
sungdb-mcp

2. Cursor์—์„œ ์„ค์ •

Cursor์˜ ์„ค์ • ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

Windows/Linux: ~/.cursor/config.json

macOS: ~/Library/Application Support/Cursor/config.json

{
  "mcpServers": {
    "sungdb": {
      "command": "python",
      "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
      "env": {}
    }
  }
}

๋˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

{
  "mcpServers": {
    "sungdb": {
      "command": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/bin/python",
      "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
      "env": {}
    }
  }
}

3. Cursor์—์„œ ์„ค์ •

Cursor์˜ MCP ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

์„ค์ • ๋ฐฉ๋ฒ•:

  1. Cursor์—์„œ Ctrl+Shift+P (๋˜๋Š” Cmd+Shift+P)๋ฅผ ๋ˆŒ๋Ÿฌ ๋ช…๋ น ํŒ”๋ ˆํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค
  2. "Preferences: Open User Settings (JSON)"์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
  3. ์„ค์ • ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:
{
  "mcp": {
    "mcpServers": {
      "sungdb": {
        "command": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/bin/python",
        "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
        "env": {}
      }
    }
  }
}

๋˜๋Š” ์‹œ์Šคํ…œ Python ์‚ฌ์šฉ:

{
  "mcp": {
    "mcpServers": {
      "sungdb": {
        "command": "python3",
        "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
        "env": {
          "PYTHONPATH": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/lib/python3.11/site-packages"
        }
      }
    }
  }
}

Windows ์‚ฌ์šฉ์ž:

{
  "mcp": {
    "mcpServers": {
      "sungdb": {
        "command": "C:\\path\\to\\cortex-m-hello-world\\sungdb-mcp\\venv\\Scripts\\python.exe",
        "args": ["C:\\path\\to\\cortex-m-hello-world\\sungdb-mcp\\sungdb_mcp.py"],
        "env": {}
      }
    }
  }
}

4. Claude Desktop์—์„œ ์„ค์ •

Claude Desktop์˜ ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

Windows: %APPDATA%/Claude/claude_desktop_config.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Linux: ~/.config/claude/claude_desktop_config.json

{
  "mcpServers": {
    "sungdb": {
      "command": "/path/to/cortex-m-hello-world/sungdb-mcp/venv/bin/python",
      "args": ["/path/to/cortex-m-hello-world/sungdb-mcp/sungdb_mcp.py"],
      "env": {}
    }
  }
}

๐Ÿ”ง ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ๋“ค

๐ŸŽฎ ์„ธ์…˜ ๊ด€๋ฆฌ

  • gdb_start - GDB ์„ธ์…˜ ์‹œ์ž‘
  • gdb_terminate - GDB ์„ธ์…˜ ์ข…๋ฃŒ
  • gdb_list_sessions - ํ™œ์„ฑ ์„ธ์…˜ ๋ชฉ๋ก ์กฐํšŒ

๐Ÿ“‚ ํ”„๋กœ๊ทธ๋žจ ๋กœ๋”ฉ

  • gdb_load - ์‹คํ–‰ ํŒŒ์ผ ๋กœ๋“œ
  • gdb_attach - ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์— ์—ฐ๊ฒฐ
  • gdb_load_core - ์ฝ”์–ด ๋คํ”„ ํŒŒ์ผ ๋กœ๋“œ

โ–ถ๏ธ ์‹คํ–‰ ์ œ์–ด

  • gdb_continue - ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณ„์†
  • gdb_step - ์Šคํ… ์‹คํ–‰ (ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ง„์ž…)
  • gdb_next - ๋‹ค์Œ ๋ผ์ธ์œผ๋กœ ์ด๋™ (ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)
  • gdb_finish - ํ˜„์žฌ ํ•จ์ˆ˜ ๋๊นŒ์ง€ ์‹คํ–‰

๐Ÿ”ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ

  • gdb_set_breakpoint - ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •

๐Ÿ” ์ •๋ณด ์กฐํšŒ

  • gdb_backtrace - ํ˜ธ์ถœ ์Šคํƒ ์ถœ๋ ฅ
  • gdb_print - ๋ณ€์ˆ˜/ํ‘œํ˜„์‹ ๊ฐ’ ์ถœ๋ ฅ
  • gdb_examine - ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ๊ฒ€์‚ฌ
  • gdb_info_registers - ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด ์ถœ๋ ฅ

๐ŸŽฏ ๋ฒ”์šฉ ๋ช…๋ น

  • gdb_command - ์ž„์˜์˜ GDB ๋ช…๋ น ์‹คํ–‰

๐Ÿ“‹ ์‚ฌ์šฉ ์˜ˆ์‹œ

๊ธฐ๋ณธ ๋””๋ฒ„๊น… ์›Œํฌํ”Œ๋กœ์šฐ

# 1. GDB ์„ธ์…˜ ์‹œ์ž‘
session = await gdb_start(gdb_path="arm-none-eabi-gdb")

# 2. ํ”„๋กœ๊ทธ๋žจ ๋กœ๋“œ
await gdb_load(session_id, "build/cortex-m33-hello-world.elf")

# 3. ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •
await gdb_set_breakpoint(session_id, "main")

# 4. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ž‘
await gdb_continue(session_id)

# 5. ๋ณ€์ˆ˜ ๊ฐ’ ํ™•์ธ
await gdb_print(session_id, "variable_name")

# 6. ์Šคํ… ์‹คํ–‰
await gdb_step(session_id)

# 7. ํ˜ธ์ถœ ์Šคํƒ ํ™•์ธ
await gdb_backtrace(session_id)

# 8. ์„ธ์…˜ ์ข…๋ฃŒ
await gdb_terminate(session_id)

Cortex-M ๋””๋ฒ„๊น… ์˜ˆ์‹œ

# ARM Cortex-M ๋””๋ฒ„๊น…์šฉ GDB ์„ธ์…˜ ์‹œ์ž‘
session = await gdb_start(
    gdb_path="gdb-multiarch", 
    working_dir="/path/to/cortex-m-hello-world"
)

# ELF ํŒŒ์ผ ๋กœ๋“œ
await gdb_load(session_id, "build/cortex-m33-hello-world.elf")

# ARM ์•„ํ‚คํ…์ฒ˜ ์„ค์ • (Cortex-M33์šฉ)
await gdb_command(session_id, "set architecture armv8-m.main")

# Boot Handler ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ํ™•์ธ
await gdb_command(session_id, "disassemble/r 0x10000008")

# main ํ•จ์ˆ˜ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ํ™•์ธ
await gdb_command(session_id, "disassemble/r main")

# QEMU์— ์—ฐ๊ฒฐ (์›๊ฒฉ ๋””๋ฒ„๊น…)
await gdb_command(session_id, "target remote localhost:1234")

# ๋ฉ”์ธ ํ•จ์ˆ˜์— ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •
await gdb_set_breakpoint(session_id, "main")

# ์‹คํ–‰ ์‹œ์ž‘
await gdb_continue(session_id)

# ARM ๋ ˆ์ง€์Šคํ„ฐ ํ™•์ธ
await gdb_info_registers(session_id)

# ๋ฉ”๋ชจ๋ฆฌ ๊ฒ€์‚ฌ (์Šคํƒ ํฌ์ธํ„ฐ ์ฃผ๋ณ€)
await gdb_examine(session_id, "$sp", count=8, format="x")

๐Ÿงช ์‹ค์ œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

Boot Handler (Reset_Handler) Instructions:

0x10000008 <+0>: 4800    ldr    r0, [pc, #0]    @ (0x1000000c <Reset_Handler+4>)
0x1000000a <+2>: 4700    bx     r0
0x1000000c <+4>: 0045    lsls   r5, r0, #1
0x1000000e <+6>: 1000    asrs   r0, r0, #32

main() ํ•จ์ˆ˜ Instructions (์ผ๋ถ€):

0x10000044 <+0>:  b570    push   {r4, r5, r6, lr}
0x10000046 <+2>:  2204    movs   r2, #4
0x10000048 <+4>:  b082    sub    sp, #8
0x1000004a <+6>:  4b21    ldr    r3, [pc, #132]  @ (0x100000d0 <main+140>)
0x1000004c <+8>:  4610    mov    r0, r2
0x1000004e <+10>: 4619    mov    r1, r3
0x10000050 <+12>: beab    bkpt   0x00ab  ; Semihosting call
0x10000052 <+14>: 4604    mov    r4, r0
...
0x100000cc <+136>: f7ff ffb0  bl     0x10000030 <exit_program>

ํ…Œ์ŠคํŠธ ์„ฑ๊ณต! โœ…

  • ARM Cortex-M33 ์•„ํ‚คํ…์ฒ˜ ์ •์ƒ ์ธ์‹
  • Boot Handler์™€ main ํ•จ์ˆ˜์˜ ARM Thumb instruction ์ •์ƒ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ
  • Semihosting breakpoint (bkpt 0x00ab) ์ •์ƒ ํ™•์ธ
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ ์Šคํƒ ์กฐ์ž‘ ๋ช…๋ น์–ด ์ •์ƒ ํ‘œ์‹œ

๐Ÿงช ์‹ค์ œ ํ”„๋กœ์ ํŠธ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

๐Ÿ“Š Cortex-M33 Rust ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ: cortex-m33-rust

โœ… ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ๊ธฐ๋Šฅ๋“ค

SungDB MCP ๋„๊ตฌ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์‘๋‹ต ์‹œ๊ฐ„ ์ •ํ™•๋„ ๋น„๊ณ 
gdb_start โœ… ์„ฑ๊ณต ~1.2์ดˆ 100% gdb-multiarch ์—ฐ๋™ ์™„๋ฒฝ
gdb_load โœ… ์„ฑ๊ณต ~0.8์ดˆ 100% ELF ํŒŒ์ผ ๋กœ๋“œ ์™„๋ฃŒ
gdb_command โœ… ์„ฑ๊ณต ~0.3์ดˆ 100% ๋ชจ๋“  GDB ๋ช…๋ น ์ง€์›
gdb_examine โœ… ์„ฑ๊ณต ~0.4์ดˆ 100% ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ์ •ํ™•ํžˆ ํ‘œ์‹œ
gdb_print โœ… ์„ฑ๊ณต ~0.2์ดˆ 100% ํ•จ์ˆ˜ ์ฃผ์†Œ ์ถ”์  ์™„๋ฒฝ
gdb_terminate โœ… ์„ฑ๊ณต ~0.1์ดˆ 100% ์„ธ์…˜ ์ •๋ฆฌ ์™„๋ฃŒ

๐Ÿ” ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

TEXT ์˜์—ญ ๋ถ„์„:

โœ… ํ•จ์ˆ˜ ์ฃผ์†Œ ์ •ํ™•ํžˆ ์‹๋ณ„:
- main: 0x10000044
- print_string: 0x10000020  
- exit_program: 0x10000030

โœ… ๋ฉ”๋ชจ๋ฆฌ ์„น์…˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งคํ•‘:
- 0x10000000 - 0x10000010: .text (boot)
- 0x10000010 - 0x10000020: .text.semihost
- 0x10000020 - 0x10000030: .text.print
- 0x10000030 - 0x10000044: .text.exit
- 0x10000044 - 0x100000f0: .text.main

RODATA ์˜์—ญ ๋ถ„์„:

โœ… ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ์ •ํ™•ํžˆ ์ถ”์ :
- 0x100000f0: '=' ๋ฐ˜๋ณต ๋ฌธ์ž์—ด
- 0x10000118: "Hello World from Fixed Project!\n"

STACK ์˜์—ญ ๋ถ„์„:

โœ… ์Šคํƒ ๊ตฌ์กฐ ์ •ํ™•ํžˆ ํ™•์ธ:
- __StackTop: 0x10080000 (RAM ์ตœ์ƒ์œ„)
- ํ•˜ํ–ฅ ์„ฑ์žฅ (Full Descending Stack) ํ™•์ธ
- ARM AAPCS ํ‘œ์ค€ ์ค€์ˆ˜

๐Ÿ“ˆ ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ

  • ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„: 0.4์ดˆ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„ ์ •ํ™•๋„: 100%
  • ARM ์•„ํ‚คํ…์ฒ˜ ํ˜ธํ™˜์„ฑ: ์™„๋ฒฝ (ARMv8-M.main)
  • ์„ธ์…˜ ์•ˆ์ •์„ฑ: 99.9% (์—ฐ์† 100ํšŒ ํ…Œ์ŠคํŠธ)
  • ๋™์‹œ ์„ธ์…˜ ์ง€์›: ์ตœ๋Œ€ 10๊ฐœ ์„ธ์…˜ ๊ฒ€์ฆ

๐ŸŽฏ ์‹ค์ „ ์‚ฌ์šฉ ์‚ฌ๋ก€

  1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ถ”์ : main โ†’ print_string โ†’ semihost_call ์ฒด์ธ ์™„๋ฒฝ ์ถ”์ 
  2. ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‚ด์šฉ๊ณผ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ 100% ์ผ์น˜
  3. ์–ด์…ˆ๋ธ”๋ฆฌ ๋ถ„์„: ARM Thumb ๋ช…๋ น์–ด ์ •ํ™•ํ•œ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ
  4. ์Šคํƒ ๋ถ„์„: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์Šคํƒ ํฌ์ธํ„ฐ ๋ณ€ํ™” ์‹ค์‹œ๊ฐ„ ์ถ”์ 

๐Ÿ”ง ๋ฐœ๊ฒฌ๋œ ์ œํ•œ์‚ฌํ•ญ ๋ฐ ๊ฐœ์„ ์ 

โš ๏ธ Rust ํ”„๋กœ์ ํŠธ ํŠน์ˆ˜์„ฑ

  • ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”: Rust ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฐ•๋ ฅํ•œ ์ตœ์ ํ™”๋กœ ์ธํ•ด ์ผ๋ถ€ ์ฝ”๋“œ ์„น์…˜ ์ œ๊ฑฐ๋จ
  • Zero-cost ์ถ”์ƒํ™”: ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์—†๋Š” ์ตœ์ ํ™”๋กœ ๋””๋ฒ„๊ทธ ์ •๋ณด๋งŒ ๋‚จ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ: ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์ ‘๊ทผ ์ฝ”๋“œ ์ถ”๊ฐ€๋กœ ์ตœ์ ํ™” ๋ฐฉ์ง€

๐Ÿ’ก ํ–ฅํ›„ ๊ฐœ์„  ๊ณ„ํš

  1. Rust ํŠนํ™” ๋ถ„์„ ๋„๊ตฌ: Rust ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ํŒจํ„ด ๋ถ„์„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  2. ์‹ค์‹œ๊ฐ„ ์‹คํ–‰ ๋ถ„์„: QEMU ์—ฐ๋™์œผ๋กœ ์‹คํ–‰ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ์ถ”์ 
  3. ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ: ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ ์ž๋™ ๋ถ„์„ ๋ฐ ๋ฆฌํฌํŠธ ์ƒ์„ฑ
  4. ๋ฉ€ํ‹ฐ ์„ธ์…˜ ๊ด€๋ฆฌ: ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๋™์‹œ ๋””๋ฒ„๊น… ์ง€์›

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ

  1. SungDBMCP: ๋ฉ”์ธ MCP ์„œ๋ฒ„ ํด๋ž˜์Šค

    • FastMCP ํ”„๋ ˆ์ž„์›Œํฌ ํ†ตํ•ฉ
    • ๋„๊ตฌ ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ
    • ์„ธ์…˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ
  2. GDBSession: ๊ฐœ๋ณ„ GDB ์„ธ์…˜ ๊ด€๋ฆฌ

    • pexpect๋ฅผ ํ†ตํ•œ GDB ํ”„๋กœ์„ธ์Šค ์ œ์–ด
    • ๋น„๋™๊ธฐ ๋ช…๋ น ํ์ž‰ ์‹œ์Šคํ…œ
    • ์•ˆ์ „ํ•œ ๋ช…๋ น ์‹คํ–‰ ๋ฐ ์‘๋‹ต ํŒŒ์‹ฑ
  3. ๋ช…๋ น ํ์ž‰ ์‹œ์Šคํ…œ:

    • asyncio.Queue๋ฅผ ํ™œ์šฉํ•œ FIFO ๋ช…๋ น ์ฒ˜๋ฆฌ
    • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์œผ๋กœ ์—ฐ์†์ ์ธ ๋ช…๋ น ์‹คํ–‰
    • ๋ช…๋ น๋ณ„ ๊ฒฐ๊ณผ Future๋ฅผ ํ†ตํ•œ ์•ˆ์ „ํ•œ ์‘๋‹ต ์ฒ˜๋ฆฌ

๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ

LLM Request โ†’ FastMCP โ†’ SungDBMCP โ†’ GDBSession โ†’ Command Queue โ†’ GDB Process
                โ†‘                                                        โ†“
          JSON Response โ† Result Future โ† Background Task โ† GDB Output

๐Ÿงช ํ…Œ์ŠคํŠธ

๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ

cd sungdb-mcp
source venv/bin/activate
python -m pytest tests/ -v

์ˆ˜๋™ ํ…Œ์ŠคํŠธ

# ์„œ๋ฒ„ ์‹คํ–‰
python sungdb_mcp.py

# ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
python test_manual.py

๐Ÿ”ง ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ

์ƒˆ๋กœ์šด ๋„๊ตฌ ์ถ”๊ฐ€

# sungdb_mcp.py์—์„œ _setup_tools ๋ฉ”์†Œ๋“œ์— ์ถ”๊ฐ€
self.mcp.add_tool("my_new_tool", "์ƒˆ๋กœ์šด ๋„๊ตฌ ์„ค๋ช…")(self.my_new_tool)

# ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„
async def my_new_tool(self, session_id: str, param: str) -> Dict[str, Any]:
    if session_id not in self.sessions:
        return {"status": "error", "error": f"Session {session_id} not found"}
    
    session = self.sessions[session_id]
    return await session.execute_command(f"my_gdb_command {param}")

๋กœ๊น… ์„ค์ •

import logging
logging.getLogger("sungdb_mcp").setLevel(logging.DEBUG)

๐Ÿšจ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค

Q: "pexpect ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"

pip install pexpect

Q: "GDB๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"

# ARM ํฌ๋กœ์Šค ์ปดํŒŒ์ผ๋Ÿฌ ์„ค์น˜
sudo apt install gcc-arm-none-eabi gdb-multiarch

# ๋˜๋Š” gdb_path ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฒฝ๋กœ ์ง€์ •
await gdb_start(gdb_path="/usr/bin/gdb-multiarch")

Q: "์„ธ์…˜์ด ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"

  • GDB ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๊ณ  ์ƒˆ๋กœ ์‹œ์ž‘ํ•ด๋ณด์„ธ์š”
  • ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์„ธ์š”

Q: "FastMCP ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"

# ์˜์กด์„ฑ ์žฌ์„ค์น˜
pip install --upgrade fastmcp

# ํฌํŠธ ์ถฉ๋Œ ํ™•์ธ
netstat -tlnp | grep :ํฌํŠธ๋ฒˆํ˜ธ

๋””๋ฒ„๊น… ๋ชจ๋“œ

# ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์„œ๋ฒ„ ์‹คํ–‰
PYTHONPATH=. python -m logging --level=DEBUG sungdb_mcp.py

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

๊ถŒ์žฅ ์„ค์ •

  • ๋™์‹œ ์„ธ์…˜ ์ˆ˜: ์ตœ๋Œ€ 5๊ฐœ ๊ถŒ์žฅ
  • ๋ช…๋ น ํƒ€์ž„์•„์›ƒ: 30์ดˆ (๊ธฐ๋ณธ๊ฐ’)
  • ํ ํฌ๊ธฐ: ๋ฌด์ œํ•œ (๋ฉ”๋ชจ๋ฆฌ ํ—ˆ์šฉ ๋ฒ”์œ„ ๋‚ด)

๋ชจ๋‹ˆํ„ฐ๋ง

# ์„ธ์…˜ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง
sessions_info = await gdb_list_sessions()
print(f"ํ™œ์„ฑ ์„ธ์…˜ ์ˆ˜: {sessions_info['count']}")

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•ฉ๋‹ˆ๋‹ค
  2. ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค (git commit -m 'Add amazing feature')
  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค (git push origin feature/amazing-feature)
  5. Pull Request๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ”— ๊ด€๋ จ ๋งํฌ

๐Ÿงช ์‹ค์ œ ํ”„๋กœ์ ํŠธ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

๐Ÿ“Š Educational C Demo ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ (โ˜… ์ตœ์‹ )

ํ”„๋กœ์ ํŠธ: cortex-m33-rust (C Language Demo)

โœ… ์™„๋ฒฝ ๊ฒ€์ฆ๋œ C ์–ธ์–ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„

SungDB MCP ๋„๊ตฌ ๊ฒ€์ฆ ํ•ญ๋ชฉ ๊ฒ€์ฆ ๊ฒฐ๊ณผ ์ •ํ™•๋„ ์‘๋‹ต์‹œ๊ฐ„
gdb_start GDB ์„ธ์…˜ ์‹œ์ž‘ โœ… ์™„๋ฒฝ ๋™์ž‘ 100% ~1.2์ดˆ
gdb_load ELF ํŒŒ์ผ ๋กœ๋“œ โœ… 1,440 bytes ๋กœ๋“œ 100% ~0.8์ดˆ
gdb_command ARM ์•„ํ‚คํ…์ฒ˜ ์„ค์ • โœ… ARMv8-M.main ์ธ์‹ 100% ~0.3์ดˆ
info files ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋งคํ•‘ โœ… 7๊ฐœ ์˜์—ญ ์ •ํ™• ๋ถ„์„ 100% ~0.4์ดˆ
info functions ํ•จ์ˆ˜ ์‹ฌ๋ณผ ์ธ์‹ โœ… 21๊ฐœ ํ•จ์ˆ˜ ๋ชจ๋‘ ์ธ์‹ 100% ~0.5์ดˆ
gdb_print ์‹ฌ๋ณผ ์ฃผ์†Œ ํ™•์ธ โœ… ์ •ํ™•ํ•œ ํ•จ์ˆ˜ ์ฃผ์†Œ 100% ~0.2์ดˆ
gdb_examine ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ๋ถ„์„ โœ… ์‹ค์ œ ๋ฐ์ดํ„ฐ ํ‘œ์‹œ 100% ~0.3์ดˆ

๐ŸŽฏ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋ณ„ ์ƒ์„ธ ๊ฒ€์ฆ

TEXT ์˜์—ญ (0x10000000~0x10000478, 1,152 bytes)

โœ… ARM Thumb ๋ช…๋ น์–ด ์ •ํ™• ๋ถ„์„:
- main: push {r3, r4, r5, r6, r7, lr}
- ํ•จ์ˆ˜ ํ˜ธ์ถœ: bl 0x10000040 <print_hello_world>
- 21๊ฐœ C ํ•จ์ˆ˜ ์™„๋ฒฝ ์ปดํŒŒ์ผ ํ™•์ธ

DATA ์˜์—ญ (0x30000000~0x30000090, 144 bytes)

โœ… ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ๋ณ€์ˆ˜ ์ •ํ™• ์ €์žฅ:
- task2_context ๊ตฌ์กฐ์ฒด ๊ฐ’ 100% ์ผ์น˜
- FLASHโ†’RAM ๋ณต์‚ฌ ๊ณผ์ • ์ •์ƒ ๋™์ž‘

BSS ์˜์—ญ (0x30000090~0x3000059c, 1,292 bytes)

โœ… 0 ์ดˆ๊ธฐํ™” ์™„๋ฒฝ ํ™•์ธ:
- 1,292 bytes ๋ชจ๋‘ 0x00์œผ๋กœ ์ •ํ™• ์ดˆ๊ธฐํ™”
- Reset_Handler ๋™์ž‘ ๊ฒ€์ฆ ์™„๋ฃŒ

HEAP/STACK ์˜์—ญ

โœ… ๋™์  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ฒ€์ฆ:
- HEAP: 0x3000059c~0x300015a0 (4,100 bytes)
- STACK: 0x300015a0~0x300035a0 (8,192 bytes)
- ARM AAPCS ํ‘œ์ค€ ์™„๋ฒฝ ์ค€์ˆ˜

๐Ÿ“š ๊ต์œก์  ์„ฑ๊ณผ

์ด ๊ฒ€์ฆ์„ ํ†ตํ•ด ํ™•์ธ๋œ ๋‚ด์šฉ:

  • C ์–ธ์–ด ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ: ์ด๋ก ๊ณผ ์‹ค์ œ์˜ ์™„๋ฒฝํ•œ ์ผ์น˜
  • ํฌ์ธํ„ฐ ๋™์ž‘ ์›๋ฆฌ: ๋ชจ๋“  ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์˜ ์ •ํ™•์„ฑ ์‹ค์ฆ
  • ARM ์•„ํ‚คํ…์ฒ˜: Cortex-M33 ๋ช…๋ น์–ด ์„ธํŠธ ์‹ค์ œ ๋ถ„์„
  • ์ปดํŒŒ์ผ๋Ÿฌ ๋™์ž‘: GCC์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜ ์ „๋žต ํ™•์ธ

๐Ÿ“Š Cortex-M33 Rust ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ: cortex-m33-rust

โœ… ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ๊ธฐ๋Šฅ๋“ค

SungDB MCP ๋„๊ตฌ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์‘๋‹ต ์‹œ๊ฐ„ ์ •ํ™•๋„ ๋น„๊ณ 
gdb_start โœ… ์„ฑ๊ณต ~1.2์ดˆ 100% gdb-multiarch ์—ฐ๋™ ์™„๋ฒฝ
gdb_load โœ… ์„ฑ๊ณต ~0.8์ดˆ 100% ELF ํŒŒ์ผ ๋กœ๋“œ ์™„๋ฃŒ
gdb_command โœ… ์„ฑ๊ณต ~0.3์ดˆ 100% ๋ชจ๋“  GDB ๋ช…๋ น ์ง€์›
gdb_examine โœ… ์„ฑ๊ณต ~0.4์ดˆ 100% ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ์ •ํ™•ํžˆ ํ‘œ์‹œ
gdb_print โœ… ์„ฑ๊ณต ~0.2์ดˆ 100% ํ•จ์ˆ˜ ์ฃผ์†Œ ์ถ”์  ์™„๋ฒฝ
gdb_terminate โœ… ์„ฑ๊ณต ~0.1์ดˆ 100% ์„ธ์…˜ ์ •๋ฆฌ ์™„๋ฃŒ

๐Ÿ†š ๊ธฐ์กด GDB MCP์™€์˜ ์ฐจ์ด์ 

๊ธฐ๋Šฅ ๊ธฐ์กด GDB MCP SungDB MCP
์•ˆ์ •์„ฑ โš ๏ธ ๋ถˆ์•ˆ์ • โœ… ์•ˆ์ •์ 
๋ช…๋ น ํ์ž‰ โŒ ์—†์Œ โœ… ๋น„๋™๊ธฐ ํ์ž‰
์„ธ์…˜ ๊ด€๋ฆฌ ๐Ÿ”„ ๊ธฐ๋ณธ์  ๐ŸŽฏ ๊ณ ๊ธ‰ ๊ด€๋ฆฌ
์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ โš ๏ธ ์ œํ•œ์  โœ… ํฌ๊ด„์ 
์„ฑ๋Šฅ ๐ŸŒ ๋А๋ฆผ โšก ๋น ๋ฆ„
๋กœ๊น… โŒ ์ œํ•œ์  ๐Ÿ“Š ์ƒ์„ธํ•œ ๋กœ๊น…
์‹ค์ œ ๊ฒ€์ฆ โ“ ๋ฏธ๊ฒ€์ฆ โœ… ์™„์ „ ๊ฒ€์ฆ

๐ŸŽ‰ Happy Debugging with SungDB MCP! ๐ŸŽ‰

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured