Skip to main content
Glama
README.md
# ๐Ÿ”ง 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:**
```bash
sudo apt update
sudo apt install -y gdb-multiarch gcc-arm-none-eabi
```

**macOS:**
```bash
brew install gdb arm-none-eabi-gdb
```

**Windows:**
- [ARM GNU Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads) ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜

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

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

```bash
cd sungdb-mcp
./install.sh
```

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

```bash
cd sungdb-mcp

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

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

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

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

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

```bash
# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
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`

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

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

```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": {}
    }
  }
}
```

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

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

#### ์„ค์ • ๋ฐฉ๋ฒ•:
1. Cursor์—์„œ `Ctrl+Shift+P` (๋˜๋Š” `Cmd+Shift+P`)๋ฅผ ๋ˆŒ๋Ÿฌ ๋ช…๋ น ํŒ”๋ ˆํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค
2. "Preferences: Open User Settings (JSON)"์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
3. ์„ค์ • ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

```json
{
  "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 ์‚ฌ์šฉ:**
```json
{
  "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 ์‚ฌ์šฉ์ž:**
```json
{
  "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`

```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 ๋ช…๋ น ์‹คํ–‰

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

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

```python
# 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 ๋””๋ฒ„๊น… ์˜ˆ์‹œ

```python
# 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:
```asm
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 (์ผ๋ถ€):
```asm
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](https://github.com/passingduck/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
```

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

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

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

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

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

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

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

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

```python
# 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}")
```

### ๋กœ๊น… ์„ค์ •

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

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

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

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

**Q: "GDB๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"**
```bash
# 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 ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"**
```bash
# ์˜์กด์„ฑ ์žฌ์„ค์น˜
pip install --upgrade fastmcp

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

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

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

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

### ๊ถŒ์žฅ ์„ค์ •

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

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

```python
# ์„ธ์…˜ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง
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` ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

- [FastMCP ๋ฌธ์„œ](https://github.com/jlowin/fastmcp)
- [GDB ๊ณต์‹ ๋ฌธ์„œ](https://sourceware.org/gdb/documentation/)
- [pexpect ๋ฌธ์„œ](https://pexpect.readthedocs.io/)
- [ARM GCC ํˆด์ฒด์ธ](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm)

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

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

**ํ”„๋กœ์ ํŠธ**: [cortex-m33-rust (C Language Demo)](https://github.com/passingduck/cortex-m33-rust)

#### โœ… ์™„๋ฒฝ ๊ฒ€์ฆ๋œ 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](https://github.com/passingduck/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!** ๐ŸŽ‰