# Rust MCP Debugger Test Report
**Date:** November 13, 2025, 1:12 PM EST
**Tester:** Automated Testing
**Test Scope:** Rust language examples in examples/rust directory
## Executive Summary
Testing of the mcp-debugger with Rust language examples was **UNSUCCESSFUL**. The debugger failed during the `start_debugging` phase with a proxy initialization error. Testing was halted as requested when `start_debugging` failed.
## Test Environment
- **Operating System:** Windows 11
- **Working Directory:** `C:\path\to\debug-mcp-server`
- **MCP Debugger:** mcp-debugger server (node-based)
- **Rust Examples Location:** `examples/rust/`
- **Available Examples:**
- `hello_world/` - Simple Rust program with variables, functions, loops
- `async_example/` - Async Rust with Tokio runtime
## Test Execution Log
### Test 1: Hello World Example
#### Step 1: Create Debug Session ✅ SUCCESS
```json
{
"language": "rust",
"name": "rust-hello-world-test"
}
```
**Result:**
- Success: `true`
- Session ID: `ed785370-db98-480e-bc5b-46778a3c269c`
- Message: "Created rust debug session: rust-hello-world-test"
#### Step 2: Set Breakpoint ✅ SUCCESS
```json
{
"sessionId": "ed785370-db98-480e-bc5b-46778a3c269c",
"file": "c:\\Users\\johnf\\Dropbox\\projects\\project\\debug-mcp-server\\examples\\rust\\hello_world\\src\\main.rs",
"line": 18
}
```
**Result:**
- Success: `true`
- Breakpoint ID: `c455244c-eddf-4e0e-a874-1d10e53b2576`
- Verified: `false` (expected - not verified until debugging starts)
- Line content: `let result = calculate_sum(5, 10);`
#### Step 3: Start Debugging ❌ FAILURE
```json
{
"sessionId": "ed785370-db98-480e-bc5b-46778a3c269c",
"scriptPath": "c:\\Users\\johnf\\Dropbox\\projects\\project\\debug-mcp-server\\examples\\rust\\hello_world\\target\\debug\\hello_world.exe"
}
```
**Result:**
- Success: `false`
- State: `error`
- Error: "Proxy exited during initialization. Code: 1, Signal: undefined"
## Detailed Error Analysis
### Error Message
```
Proxy exited during initialization. Code: 1, Signal: undefined
```
### Stderr Output Analysis
The proxy successfully started and received the initialization command:
```
[Bootstrap 2025-11-13T18:12:24.893Z] Bootstrap script started
[Proxy Worker] Starting DAP Proxy worker process...
[INFO] [ProxyRunner] Starting proxy runner...
[INFO] [ProxyRunner] Setting up IPC communication
[INFO] [ProxyRunner] IPC channel confirmed available
[INFO] [ProxyRunner] Ready to receive commands
```
The proxy received the init command and processed it:
```
[INFO] [ProxyRunner] IPC message #1 received type=object
[INFO] [ProxyRunner] Received message (first 200 chars)
[INFO] [ProxyRunner] Initialization timeout cleared
```
But then the proxy exited with code 1:
```
(node:47992) WARNING: Exited the environment with code 1
at exit (node:internal/process/per_thread:187:13)
at DapProxyWorker.exitHook (file:///C:/Users/user/workspace/250106%20AGENTS/debug-mcp-server/dist/proxy/dap-proxy-worker.js:36:21)
at handleInitCommand (file:///C:/Users/user/workspace/250106%20AGENTS/debug-mcp-server/dist/proxy/dap-proxy-worker.js:167:18)
```
### Configuration Data from Init Command
The init command contained the following critical parameters:
**Adapter Configuration:**
- Command: `C:\path\to\debug-mcp-server\packages\adapter-rust\vendor\codelldb\win32-x64\adapter\codelldb.exe`
- Args: `['--port', '59157']`
- Adapter Host: `127.0.0.1`
- Adapter Port: `59157`
**Script Configuration:**
- Script Path: `C:\path\to\debug-mcp-server\examples\rust\hello_world\target\debug\hello_world.exe`
- Executable Path: `cargo` (❓ Potentially problematic)
- Stop On Entry: `true`
- Just My Code: `true`
**Environment Variables:**
- `LLDB_USE_NATIVE_PDB_READER: '1'`
- `RUST_BACKTRACE: '1'`
**Breakpoints:**
```json
[{
"file": "c:\\Users\\johnf\\Dropbox\\projects\\project\\debug-mcp-server\\examples\\rust\\hello_world\\src\\main.rs",
"line": 18
}]
```
## Root Cause Analysis
### Primary Issue: Proxy Initialization Failure
The proxy worker process successfully started and received the initialization command but crashed during `handleInitCommand`. The exit occurred at:
- File: `dap-proxy-worker.js`
- Location: Line 167 in `handleInitCommand`
- Exit code: 1
### Potential Root Causes
#### 1. **Executable Path Mismatch** (HIGH PROBABILITY)
The init command shows:
```json
"executablePath": "cargo"
```
However, the `scriptPath` is set to the compiled executable:
```json
"scriptPath": "c:\\Users\\johnf\\Dropbox\\projects\\project\\debug-mcp-server\\examples\\rust\\hello_world\\target\\debug\\hello_world.exe"
```
**Analysis:** For Rust debugging with CodeLLDB, the `executablePath` should typically be the path to the Rust executable (the compiled binary), NOT "cargo". Having `executablePath` set to "cargo" while `scriptPath` points to the actual binary suggests a configuration mismatch that may be confusing the adapter initialization.
**Expected Configuration:**
- For direct binary debugging: `executablePath` should be the same as `scriptPath` (the .exe file)
- For cargo-based debugging: Different launch configuration would be needed
#### 2. **CodeLLDB Adapter Issues** (MEDIUM PROBABILITY)
The CodeLLDB adapter is located at:
```
C:\path\to\debug-mcp-server\packages\adapter-rust\vendor\codelldb\win32-x64\adapter\codelldb.exe
```
Possible issues:
- CodeLLDB may not be properly installed or extracted
- Version compatibility issues with Windows
- Missing dependencies for CodeLLDB
#### 3. **Path Handling Issues** (MEDIUM PROBABILITY)
The paths contain spaces:
```
C:\path\to\debug-mcp-server\
```
While the proxy shows proper escaping in the init command, CodeLLDB or the adapter might not handle spaces correctly in all contexts.
#### 4. **Missing Debug Symbols** (LOW PROBABILITY)
The `.pdb` file should be present at:
```
examples\rust\hello_world\target\debug\hello_world.pdb
```
If missing, CodeLLDB might fail to initialize properly. However, the file list confirms this file exists, so this is less likely.
#### 5. **IPC Communication Issue** (LOW PROBABILITY)
Although the proxy shows "IPC channel confirmed available" and successfully received the init message, there may be an issue with:
- Response back to the parent process
- Handling of the initialization sequence
- Timeout or communication failure after receiving the command
### Stack Trace Analysis
```
at exit (node:internal/process/per_thread:187:13)
at DapProxyWorker.exitHook (file:///.../dap-proxy-worker.js:36:21)
at handleInitCommand (file:///.../dap-proxy-worker.js:167:18)
```
The stack trace shows:
1. `handleInitCommand` was executing (line 167)
2. Something triggered `exitHook` (line 36)
3. Which called `exit()` with code 1
This suggests that `handleInitCommand` encountered an error condition that triggered the exit hook, likely due to an unhandled error or validation failure.
## Observations
### What Worked
1. ✅ Debug session creation for Rust language
2. ✅ Breakpoint setting with source file path
3. ✅ Proxy process startup and IPC initialization
4. ✅ Receipt and parsing of init command
### What Failed
1. ❌ Proxy initialization (exit code 1 in `handleInitCommand`)
2. ❌ Adapter startup/connection
3. ❌ Actual debugging session launch
### Not Tested
- Step operations (step over, step into, step out)
- Continue execution
- Variable inspection
- Stack trace retrieval
- Expression evaluation
- Async example debugging
## Recommendations
### Immediate Actions
1. **Investigate executablePath Configuration**
- Check why `executablePath` is set to "cargo" instead of the binary path
- Review the Rust adapter factory logic for executable path determination
- Verify the correct configuration for direct binary vs cargo-based debugging
2. **Add Error Logging**
- The proxy exits with code 1 but doesn't provide the actual error message
- Add try-catch and detailed error logging in `handleInitCommand`
- Log the specific failure point before calling `exitHook`
3. **Verify CodeLLDB Installation**
- Check that CodeLLDB is properly extracted and executable
- Verify all required DLLs and dependencies are present
- Test CodeLLDB standalone to ensure it works
4. **Review Adapter Policy**
- Check `packages/shared/src/interfaces/adapter-policy-rust.ts`
- Verify the launch configuration template
- Ensure proper handling of Rust binary paths
### Further Investigation
1. **Enable Debug Logging**
- Review logs in: `C:\path\to\debug-mcp-server\logs\sessions\ed785370-db98-480e-bc5b-46778a3c269c\`
- Check for detailed error messages from the proxy worker
- Enable DAP protocol logging if available
2. **Test CodeLLDB Directly**
- Try launching CodeLLDB adapter manually
- Test with a simple Rust binary to isolate the issue
- Verify that CodeLLDB can connect and debug
3. **Compare with Working Tests**
- Review existing test files: `tests/integration/rust/rust-integration.test.ts`
- Check for differences in configuration
- Identify what makes test scenarios work vs this manual test
4. **Path Handling Review**
- Test with a path without spaces
- Verify proper escaping throughout the stack
- Check CodeLLDB's path handling requirements
## Impact Assessment
### Severity: **HIGH**
The debugger is completely non-functional for Rust binaries. This is a critical failure that prevents any Rust debugging functionality.
### User Impact
- ❌ Cannot debug Rust applications
- ❌ Cannot set and hit breakpoints
- ❌ Cannot inspect variables
- ❌ Cannot step through Rust code
### Affected Components
- Rust adapter initialization
- DAP proxy worker
- CodeLLDB integration
- Session management for Rust
## Comparison with Previous Test Reports
Looking at the open tabs, there are several previous Rust test reports:
- `RUST_MCP_DEBUGGER_TEST_REPORT_NEW.md`
- `RUST_MCP_DEBUGGER_TEST_REPORT.md`
- `RUST_DEBUGGER_TEST_REPORT.md`
This suggests Rust debugging has been an ongoing area of investigation. The current failure may be:
- A regression from previous working state
- A persistent known issue
- An environment-specific problem
## Test Files and Resources
### Source Files Examined
1. **examples/rust/hello_world/src/main.rs**
- Simple program with variables, functions, loops
- 42 lines total
- Includes `calculate_sum()` function for testing
2. **examples/rust/async_example/src/main.rs**
- Tokio-based async program
- Multiple async tasks and spawning
- Not tested due to initial failure
### Compiled Artifacts
Both examples have been compiled:
- `hello_world/target/debug/hello_world.exe` - Present
- `hello_world/target/debug/hello_world.pdb` - Present (debug symbols)
- `async_example/target/debug/async_example.exe` - Present
- `async_example/target/debug/async_example.pdb` - Present
## Conclusion
Testing of the MCP debugger with Rust examples was unsuccessful due to a proxy initialization failure during the `start_debugging` command. The primary suspect is a configuration mismatch where `executablePath` is set to "cargo" instead of the actual binary path. Further investigation is required to:
1. Determine why the proxy crashes in `handleInitCommand`
2. Verify the correct Rust adapter configuration
3. Ensure CodeLLDB is properly installed and functional
4. Add better error reporting to identify the specific failure
The debugger successfully completed the initial setup steps (session creation, breakpoint setting) but failed at the critical point of actually launching the debug session. This indicates the infrastructure is partially working but has a critical flaw in the adapter initialization sequence.
**Status:** ❌ **FAILED - Testing halted as requested**
**Next Steps:** Investigate and fix proxy initialization issue before retrying