Skip to content

Commit d886cef

Browse files
committed
[lldb][lldb-dap] handle multiple debug sessions correctly.
1 parent ef84287 commit d886cef

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,24 @@ export class DebugSessionTracker
3535
* The modules are kept in an array to maintain the load order of the modules.
3636
*/
3737
private modules = new Map<vscode.DebugSession, DebugProtocol.Module[]>();
38-
private modulesChanged = new vscode.EventEmitter<void>();
38+
private modulesChanged = new vscode.EventEmitter<
39+
vscode.DebugSession | undefined
40+
>();
3941

4042
/**
4143
* Fired when modules are changed for any active debug session.
4244
*
4345
* Use `debugSessionModules` to retieve the active modules for a given debug session.
4446
*/
45-
onDidChangeModules: vscode.Event<void> = this.modulesChanged.event;
47+
onDidChangeModules: vscode.Event<vscode.DebugSession | undefined> =
48+
this.modulesChanged.event;
49+
50+
constructor() {
51+
this.onDidChangeModules(this.moduleChangedListener, this);
52+
vscode.debug.onDidChangeActiveDebugSession((session) =>
53+
this.modulesChanged.fire(session),
54+
);
55+
}
4656

4757
dispose() {
4858
this.modules.clear();
@@ -52,7 +62,6 @@ export class DebugSessionTracker
5262
createDebugAdapterTracker(
5363
session: vscode.DebugSession,
5464
): vscode.ProviderResult<vscode.DebugAdapterTracker> {
55-
this.showModulesTreeView(false);
5665
return {
5766
onDidSendMessage: (message) => this.onDidSendMessage(session, message),
5867
onExit: () => this.onExit(session),
@@ -71,11 +80,7 @@ export class DebugSessionTracker
7180
/** Clear information from the active session. */
7281
private onExit(session: vscode.DebugSession) {
7382
this.modules.delete(session);
74-
// close when there is no more sessions
75-
if (this.modules.size <= 0) {
76-
this.showModulesTreeView(false);
77-
}
78-
this.modulesChanged.fire();
83+
this.modulesChanged.fire(undefined);
7984
}
8085

8186
private showModulesTreeView(showModules: boolean) {
@@ -86,6 +91,18 @@ export class DebugSessionTracker
8691
);
8792
}
8893

94+
private moduleChangedListener(session: vscode.DebugSession | undefined) {
95+
if (!session) {
96+
this.showModulesTreeView(false);
97+
return;
98+
}
99+
100+
if (session == vscode.debug.activeDebugSession) {
101+
const sessionHasModules = this.modules.get(session) != undefined;
102+
this.showModulesTreeView(sessionHasModules);
103+
}
104+
}
105+
89106
private onDidSendMessage(
90107
session: vscode.DebugSession,
91108
message: DebugProtocol.ProtocolMessage,
@@ -102,9 +119,6 @@ export class DebugSessionTracker
102119
} else {
103120
modules.push(module);
104121
}
105-
if (modules.length == 1) {
106-
this.showModulesTreeView(true);
107-
}
108122
break;
109123
}
110124
case "removed": {
@@ -119,7 +133,7 @@ export class DebugSessionTracker
119133
break;
120134
}
121135
this.modules.set(session, modules);
122-
this.modulesChanged.fire();
136+
this.modulesChanged.fire(session);
123137
}
124138
}
125139
}

lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ export class ModulesDataProvider implements vscode.TreeDataProvider<TreeData> {
5252

5353
constructor(private readonly tracker: DebugSessionTracker) {
5454
tracker.onDidChangeModules(() => this.changeTreeData.fire());
55-
vscode.debug.onDidChangeActiveDebugSession(() =>
56-
this.changeTreeData.fire(),
57-
);
5855
}
5956

6057
getTreeItem(module: TreeData): vscode.TreeItem {

0 commit comments

Comments
 (0)