You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,12 @@ All notable changes to DebugMCP will be documented in this file.
4
4
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
6
6
7
+
## [Unreleased]
8
+
9
+
### Added
10
+
-**`get_unbound_breakpoints` tool** — returns all breakpoints that the debugger could not bind to an executable line (`verified === false` in the DAP protocol). Useful for diagnosing silent `add_breakpoint` failures. Reports the debugger’s own reason string when available. Without an active debug session all pending breakpoints are listed with a reminder to call `start_debugging` first.
11
+
-**`add_breakpoint` now reports verification status** — after setting a breakpoint the tool waits briefly and queries the active debug session via `getDebugProtocolBreakpoint`. The response is now a JSON object with `file`, `line`, `verified`, and an optional `hint` explaining why the breakpoint could not be bound. Addresses the silent-failure issue described in [#18](https://github.com/microsoft/DebugMCP/issues/18).
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -57,6 +57,7 @@ DebugMCP is an MCP server that gives AI coding agents full control over the VS C
57
57
|**remove_breakpoint**| Remove a breakpoint from a specific line |`fileFullPath` (required)<br>`line` (required) |
58
58
|**clear_all_breakpoints**| Remove all breakpoints at once | None |
59
59
|**list_breakpoints**| List all active breakpoints | None |
60
+
|**get_unbound_breakpoints**| Returns all breakpoints that are unverified (set but not resolved to an executable line). Most useful after `start_debugging`. | None |
60
61
|**get_variables_values**| Get variables and their values at current execution point |`scope` (optional: 'local', 'global', 'all') |
61
62
|**evaluate_expression**| Evaluate an expression in debug context |`expression` (required) |
description: 'Inspect all variable values at the current execution point. This is your window into program state - see what data looks like at runtime, verify assumptions, identify unexpected values, and understand why code behaves as it does.',
entry+=`\n Resolved to: ${resolvedPath}${resolvedLine!==undefined ? `:${resolvedLine}` : ''}`;
414
+
entry+=`\n Hint: The debugger found a different source file. This is often a sourcemap or build-output path mismatch.`;
415
+
}elseif(!resolvedPath){
416
+
entry+=`\n Hint: The debugger could not find a corresponding source location. Check that lineContent matches an actual executable statement and that any required build step has run.`;
417
+
}
418
+
419
+
diagnostics.push(entry);
420
+
}
421
+
}
422
+
423
+
if(diagnostics.length===0){
424
+
return'All breakpoints are verified (bound to executable lines).';
425
+
}
426
+
427
+
return`Unbound (unverified) breakpoints — ${diagnostics.length} of ${sourceBreakpoints.length} could not be resolved:\n\n${diagnostics.join('\n\n')}`;
0 commit comments