Skip to content

Commit dfc65ef

Browse files
authored
[lldb][lldb-dap] show modules pane if supported by the adapter (#140603)
Fixes #140589 Added logic to dynamically set the `lldb-dap.showModules` context based on the presence of modules in the debug session.
1 parent 554e27e commit dfc65ef

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

lldb/tools/lldb-dap/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@
787787
{
788788
"id": "lldb-dap.modules",
789789
"name": "Modules",
790-
"when": "inDebugMode && debugType == 'lldb-dap'",
790+
"when": "inDebugMode && debugType == 'lldb-dap' && lldb-dap.showModules",
791791
"icon": "$(symbol-module)"
792792
}
793793
]

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

Lines changed: 34 additions & 4 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();
@@ -70,7 +80,27 @@ export class DebugSessionTracker
7080
/** Clear information from the active session. */
7181
private onExit(session: vscode.DebugSession) {
7282
this.modules.delete(session);
73-
this.modulesChanged.fire();
83+
this.modulesChanged.fire(undefined);
84+
}
85+
86+
private showModulesTreeView(showModules: boolean) {
87+
vscode.commands.executeCommand(
88+
"setContext",
89+
"lldb-dap.showModules",
90+
showModules,
91+
);
92+
}
93+
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+
}
74104
}
75105

76106
private onDidSendMessage(
@@ -103,7 +133,7 @@ export class DebugSessionTracker
103133
break;
104134
}
105135
this.modules.set(session, modules);
106-
this.modulesChanged.fire();
136+
this.modulesChanged.fire(session);
107137
}
108138
}
109139
}

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)