sungdb-mcp

passingduck/sungdb-mcp

3.2

If you are the rightful owner of sungdb-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

SungDB MCP Server is a high-performance GDB debugging server built on the FastMCP framework, designed to provide a stable debugging environment by managing GDB processes and queuing commands for sequential execution.

Tools
5
Resources
0
Prompts
0

๐Ÿ”ง 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_startGDB ์„ธ์…˜ ์‹œ์ž‘โœ… ์™„๋ฒฝ ๋™์ž‘100%~1.2์ดˆ
gdb_loadELF ํŒŒ์ผ ๋กœ๋“œโœ… 1,440 bytes ๋กœ๋“œ100%~0.8์ดˆ
gdb_commandARM ์•„ํ‚คํ…์ฒ˜ ์„ค์ •โœ… 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 MCPSungDB MCP
์•ˆ์ •์„ฑโš ๏ธ ๋ถˆ์•ˆ์ •โœ… ์•ˆ์ •์ 
๋ช…๋ น ํ์ž‰โŒ ์—†์Œโœ… ๋น„๋™๊ธฐ ํ์ž‰
์„ธ์…˜ ๊ด€๋ฆฌ๐Ÿ”„ ๊ธฐ๋ณธ์ ๐ŸŽฏ ๊ณ ๊ธ‰ ๊ด€๋ฆฌ
์˜ค๋ฅ˜ ์ฒ˜๋ฆฌโš ๏ธ ์ œํ•œ์ โœ… ํฌ๊ด„์ 
์„ฑ๋Šฅ๐ŸŒ ๋А๋ฆผโšก ๋น ๋ฆ„
๋กœ๊น…โŒ ์ œํ•œ์ ๐Ÿ“Š ์ƒ์„ธํ•œ ๋กœ๊น…
์‹ค์ œ ๊ฒ€์ฆโ“ ๋ฏธ๊ฒ€์ฆโœ… ์™„์ „ ๊ฒ€์ฆ

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