zed-industries/zed · error
Could not resolve task variables within a debug scenario
Error message
Could not resolve task variables within a debug scenario
What it means
A debug scenario's `build` entry is resolved from a task template: `task_template.resolve_task("debug-build-task", &task_context)` substitutes template variables against the task context; if any variable cannot be resolved it returns None and the debug session aborts with this error (running.rs:1143). The error is about variable substitution inside the build task, not about the debug config itself.
Source
Thrown at crates/debugger_ui/src/session/running.rs:1143
let task = task_store.update(cx, |this, cx| {
this.task_inventory().map(|inventory| {
inventory.read(cx).task_template_by_label(
buffer,
worktree_id,
label,
cx,
)
})
})?;
let task = match task {
Some(task) => task.await,
None => None,
}.with_context(|| format!("Couldn't find task template for {build:?}"))?;
(task, None)
}
};
let Some(mut task) = task_template.resolve_task("debug-build-task", &task_context) else {
anyhow::bail!("Could not resolve task variables within a debug scenario");
};
let locator_name = if let Some(locator_name) = locator_name {
extra_config = config.clone();
debug_assert!(!config_is_valid);
Some(locator_name)
} else if !config_is_valid {
let task = dap_store
.update(cx, |this, cx| {
this.debug_scenario_for_build_task(
task.original_task().clone(),
adapter.clone().into(),
task.display_label().to_owned().into(),
cx,
)
});
if let Ok(t) = task {View on GitHub (pinned to f4178619ac)
Solutions
- Open the referenced build task template and replace unsupported variables with concrete values or supported ones ($ZED_WORKTREE_ROOT, $ZED_FILE, $ZED_ROW).
- Run the same task standalone (task runner) to see which variable fails to substitute — the task UI shows the unresolved template.
- Start the debug session from a context that provides the needed values (open the target file in the right worktree) before invoking the scenario.
Example fix
// before (build task template — unresolvable in debug context)
[
{ "label": "build", "command": "make build TARGET=$MY_CUSTOM_VAR", "use_new_terminal": true }
]
// after
[
{ "label": "build", "command": "make build", "cwd": "$ZED_WORKTREE_ROOT", "use_new_terminal": true }
] Defensive patterns
Strategy: validation
Validate before calling
// dry-run variable resolution before launching the debug session
let resolved = task_template.resolve_task("debug-build-task", &task_context);
if resolved.is_none() {
return Err(anyhow!("build task template has variables the current context cannot resolve"));
} Try / catch
On failure, fall back to showing the raw template with unresolvable variables highlighted (run the same task standalone in the task runner) instead of a bare bail.
Prevention
- Prefer context-stable variables ($ZED_WORKTREE_ROOT) over file-dependent ones in build templates.
- Test debug scenarios from the same context users will launch them from.
- Keep a minimal template that resolves everywhere as the fallback build command.
When it happens
Trigger: A build task template referencing variables the debug task context does not provide — file-relative variables when no file context exists, custom/user variables, or a variable name that is not defined; also when the resolved context (worktree, active item) differs from what the template assumes.
Common situations: Running a debug scenario from a context with no open file; templates copied from tasks.json that use program-specific variables; variable renames after a Zed update; multi-worktree setups where the template assumes the wrong worktree root.
Related errors
- Cannot have two different hosts in debug configuration
- Cannot have two different ports in debug configuration
- debug config not found in mode: {mode}
- No process selected with config that contains {}
- Build failed
AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20).
Data as JSON: /api/errors/15a742145d902832.
Report an issue: GitHub.