Skip to main content
Glama

๐Ÿ”ง SungDB MCP Server

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

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

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

  • ๐Ÿš€ FastMCP ๊ธฐ๋ฐ˜: ์ตœ์‹  FastMCP ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„๋œ ๊ณ ์„ฑ๋Šฅ ์„œ๋ฒ„

  • ๐Ÿ”„ ๋ช…๋ น ํ์ž‰: ๋ช…๋ น์–ด๋“ค์„ ํ์— ์ €์žฅํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰

  • ๐ŸŽฏ ์„ธ์…˜ ๊ด€๋ฆฌ: ์—ฌ๋Ÿฌ GDB ์„ธ์…˜์„ ๋™์‹œ์— ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

  • โšก ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: asyncio ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋ช…๋ น ์ฒ˜๋ฆฌ๋กœ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ

  • ๐Ÿ›ก๏ธ ์•ˆ์ •์„ฑ: pexpect๋ฅผ ํ™œ์šฉํ•œ ์•ˆ์ •์ ์ธ GDB ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

  • ๐Ÿ” ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ: ๊ธฐ์กด GDB MCP์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๊ตฌํ˜„

Related MCP server: 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! ๐ŸŽ‰

F
license - not found
-
quality - not tested
D
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    D
    maintenance
    An MCP server that provides programmatic access to the GNU Debugger (GDB), enabling AI models to interact with GDB through natural language for debugging tasks.
    8
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables AI assistants to control GDB debugging sessions, including breakpoint management, thread analysis, and variable inspection, using the GDB/MI protocol.
    22
    1
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    MCP server for remote debugging with gdbserver, offering full debugging capabilities including breakpoint control, stepping, memory inspection, and process management.
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for Klever blockchain smart contract development.

  • MCP server for understanding Javascript internals from ECMAScript specification.

  • A MCP server built for developers enabling Git based project management with project and personalโ€ฆ

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/passingduck/sungdb-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server