diff --git a/src/features/debugger/__tests__/toolWindow.test.tsx b/src/features/debugger/__tests__/toolWindow.test.tsx
index ead7668fd..52deb2527 100644
--- a/src/features/debugger/__tests__/toolWindow.test.tsx
+++ b/src/features/debugger/__tests__/toolWindow.test.tsx
@@ -228,6 +228,20 @@ describe("debug tool window", () => {
expect(console.getAttribute("aria-selected")).toBe("true");
});
+ it("opens on Console for a running session, and on the view last picked when shown again", () => {
+ useDebug.setState({ sessions: { 1: { ...session, status: "running" } }, active: 1 });
+ const first = render();
+ expect(screen.getByRole("tab", { name: "Console" }).getAttribute("aria-selected")).toBe("true");
+ fireEvent.click(screen.getByRole("tab", { name: "Threads & Variables" }));
+ first.unmount();
+ const again = render();
+ expect(screen.getByRole("tab", { name: "Threads & Variables" }).getAttribute("aria-selected")).toBe("true");
+ fireEvent.click(screen.getByRole("tab", { name: "Console" }));
+ again.unmount();
+ render();
+ expect(screen.getByRole("tab", { name: "Console" }).getAttribute("aria-selected")).toBe("true");
+ });
+
it("renders session tabs, views, frames and typed variables", async () => {
useDebug.setState({ sessions: { 1: session }, active: 1 });
render(
diff --git a/src/features/debugger/ui/DebugToolWindow.tsx b/src/features/debugger/ui/DebugToolWindow.tsx
index dcc5ccfc4..5ddc284a0 100644
--- a/src/features/debugger/ui/DebugToolWindow.tsx
+++ b/src/features/debugger/ui/DebugToolWindow.tsx
@@ -103,6 +103,9 @@ function MoreActions() {
type Tab = "variables" | "console" | "memory";
+/** The view the user last picked; the tool window opens on it again (Console until one is picked). */
+let chosenTab: Tab = "console";
+
function statusText(s: DebugSession): string {
if (s.status === "terminated") return s.exitCode != null ? `Finished · exit code ${s.exitCode}` : "Finished";
if (s.status === "starting") return "Starting…";
@@ -149,7 +152,7 @@ export function DebugToolWindow() {
session: number | undefined;
status: DebugSession["status"] | undefined;
tab: Tab;
- }>({ session: undefined, status: undefined, tab: "variables" });
+ }>({ session: undefined, status: undefined, tab: chosenTab });
if (active && (view.session !== active.startedAt || view.status !== active.status))
setView({
session: active.startedAt,
@@ -232,7 +235,10 @@ export function DebugToolWindow() {
aria-selected={tab === id}
aria-controls={`debug-panel-${id}`}
className={clsx(styles.tab, tab === id && styles.tabActive)}
- onClick={() => setView({ session: active.startedAt, status: active.status, tab: id })}
+ onClick={() => {
+ chosenTab = id;
+ setView({ session: active.startedAt, status: active.status, tab: id });
+ }}
>
{tx(label)}