Skellar Execution Visualization (MVP)
Capture per-line debugger snapshots using the Debug Adapter Protocol (DAP) and visualize the current variable state in a Webview. MVP targets Python via VS Code's Python debug adapter; design supports other languages.
Features
- Listens to DAP
stopped
events and captures:
- Current file and line from
stackTrace
- Locals from
scopes
+ variables
(depth configurable)
- Streams the latest state into a live Webview panel
- Command to start Python debugging for the active file
Commands
DAP Snapshots: Start Python Debug
(dapSnapshots.startPython
)
DAP Snapshots: Show Snapshot Panel
(dapSnapshots.showPanel
) – Panel title: "Execution Visualization"
Settings
dapSnapshots.maxVariableDepth
(default: 3)
dapSnapshots.captureFor
(default: ["python"]
)
Development
cd vscode-extension
npm install
npm run watch
Press F5 to launch an Extension Development Host.
Planned roadmap
- Cross-language adapters (Node, C/C++, Go)
- AST instrumentation layer for expression/operator-level tracing
- Enhanced visualizations (animations for arrays, bubbles for variables)
Loop instrumentation (optional, recommended)
The visualizer can pick up explicit loop context via console output markers. If you emit a line beginning with [DAPS-INSTR]
followed by JSON, the extension will forward it to the webview to drive the loop lane precisely (variable name, range, current value).
Python helper:
def daps_loop(var_name, start, stop, step, current):
import json, sys
payload = {"loop": {"var": var_name, "range": [start, stop, step], "current": current}}
print("[DAPS-INSTR]" + json.dumps(payload))
Example usage:
sum_ = 0
for i in range(10):
# Emit explicit loop step info (start=0, stop=10, step=1)
daps_loop("i", 0, 10, 1, i)
sum_ += i
Notes:
- The message must be a single line starting with
[DAPS-INSTR]
and immediately followed by a JSON object.
- The extension recognizes this marker from DAP
output
events and forwards it live to the panel.
- If no instrumentation is present, the panel falls back to heuristics using recent snapshots.