[Lldb-commits] [lldb] [lldb][lldb-dap] show modules pane if supported by the adapter (PR #140603)
Ebuka Ezike via lldb-commits
lldb-commits at lists.llvm.org
Tue May 20 04:35:19 PDT 2025
https://github.com/da-viper updated https://github.com/llvm/llvm-project/pull/140603
>From 8ca0be7cdd49caa32db43097d9ff9c4060b1d87d Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Mon, 19 May 2025 20:44:31 +0100
Subject: [PATCH 1/4] [lldb][lldb-dap] show modules pane if supported by the
adapter
Fixes #140589
Added logic to dynamically set the `lldb-dap.showModules` context based on the presence of modules in the debug session.
---
lldb/tools/lldb-dap/package.json | 2 +-
lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/lldb/tools/lldb-dap/package.json b/lldb/tools/lldb-dap/package.json
index d5ca604798799..7f90d5535b54b 100644
--- a/lldb/tools/lldb-dap/package.json
+++ b/lldb/tools/lldb-dap/package.json
@@ -787,7 +787,7 @@
{
"id": "lldb-dap.modules",
"name": "Modules",
- "when": "inDebugMode && debugType == 'lldb-dap'",
+ "when": "inDebugMode && debugType == 'lldb-dap' && lldb-dap.showModules",
"icon": "$(symbol-module)"
}
]
diff --git a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
index 1ce190938d9c7..d9c3c617e6d85 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
@@ -52,6 +52,7 @@ export class DebugSessionTracker
createDebugAdapterTracker(
session: vscode.DebugSession,
): vscode.ProviderResult<vscode.DebugAdapterTracker> {
+ this.showModulesTreeView(false);
return {
onDidSendMessage: (message) => this.onDidSendMessage(session, message),
onExit: () => this.onExit(session),
@@ -73,6 +74,14 @@ export class DebugSessionTracker
this.modulesChanged.fire();
}
+ private showModulesTreeView(showModules: boolean) {
+ vscode.commands.executeCommand(
+ "setContext",
+ "lldb-dap.showModules",
+ showModules,
+ );
+ }
+
private onDidSendMessage(
session: vscode.DebugSession,
message: DebugProtocol.ProtocolMessage,
@@ -102,6 +111,8 @@ export class DebugSessionTracker
console.error("unexpected module event reason");
break;
}
+
+ this.showModulesTreeView(modules.length > 0);
this.modules.set(session, modules);
this.modulesChanged.fire();
}
>From 2d98cf6f16a7e554ed7b5f00c7dcabb834774cb1 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Mon, 19 May 2025 23:42:15 +0100
Subject: [PATCH 2/4] [lldb][lldb-dap] show modules pane if supported by the
adapter
Added logic to dynamically set the `lldb-dap.showModules` context based on the presence of modules in the debug session.
---
lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
index d9c3c617e6d85..47311a56b0596 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
@@ -71,6 +71,10 @@ export class DebugSessionTracker
/** Clear information from the active session. */
private onExit(session: vscode.DebugSession) {
this.modules.delete(session);
+ // close when there is no more sessions
+ if (this.modules.size <= 0) {
+ this.showModulesTreeView(false);
+ }
this.modulesChanged.fire();
}
@@ -98,6 +102,9 @@ export class DebugSessionTracker
} else {
modules.push(module);
}
+ if (modules.length == 1) {
+ this.showModulesTreeView(true);
+ }
break;
}
case "removed": {
@@ -112,7 +119,6 @@ export class DebugSessionTracker
break;
}
- this.showModulesTreeView(modules.length > 0);
this.modules.set(session, modules);
this.modulesChanged.fire();
}
>From ef84287502ef4a50a9ac6f6254d2cb7159c1b7f7 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Mon, 19 May 2025 23:43:17 +0100
Subject: [PATCH 3/4] [lldb][lldb-dap] show modules pane if supported by the
adapter
Added logic to dynamically set the `lldb-dap.showModules` context based on the presence of modules in the debug session.
---
lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
index 47311a56b0596..1cf9734202a4b 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
@@ -118,7 +118,6 @@ export class DebugSessionTracker
console.error("unexpected module event reason");
break;
}
-
this.modules.set(session, modules);
this.modulesChanged.fire();
}
>From d886ceff532f8c2d75fc00f84b2ff7ab9259924d Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Tue, 20 May 2025 12:34:29 +0100
Subject: [PATCH 4/4] [lldb][lldb-dap] handle multiple debug sessions
correctly.
---
.../lldb-dap/src-ts/debug-session-tracker.ts | 38 +++++++++++++------
.../src-ts/ui/modules-data-provider.ts | 3 --
2 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
index 1cf9734202a4b..50db1e1c3a7b0 100644
--- a/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
+++ b/lldb/tools/lldb-dap/src-ts/debug-session-tracker.ts
@@ -35,14 +35,24 @@ export class DebugSessionTracker
* The modules are kept in an array to maintain the load order of the modules.
*/
private modules = new Map<vscode.DebugSession, DebugProtocol.Module[]>();
- private modulesChanged = new vscode.EventEmitter<void>();
+ private modulesChanged = new vscode.EventEmitter<
+ vscode.DebugSession | undefined
+ >();
/**
* Fired when modules are changed for any active debug session.
*
* Use `debugSessionModules` to retieve the active modules for a given debug session.
*/
- onDidChangeModules: vscode.Event<void> = this.modulesChanged.event;
+ onDidChangeModules: vscode.Event<vscode.DebugSession | undefined> =
+ this.modulesChanged.event;
+
+ constructor() {
+ this.onDidChangeModules(this.moduleChangedListener, this);
+ vscode.debug.onDidChangeActiveDebugSession((session) =>
+ this.modulesChanged.fire(session),
+ );
+ }
dispose() {
this.modules.clear();
@@ -52,7 +62,6 @@ export class DebugSessionTracker
createDebugAdapterTracker(
session: vscode.DebugSession,
): vscode.ProviderResult<vscode.DebugAdapterTracker> {
- this.showModulesTreeView(false);
return {
onDidSendMessage: (message) => this.onDidSendMessage(session, message),
onExit: () => this.onExit(session),
@@ -71,11 +80,7 @@ export class DebugSessionTracker
/** Clear information from the active session. */
private onExit(session: vscode.DebugSession) {
this.modules.delete(session);
- // close when there is no more sessions
- if (this.modules.size <= 0) {
- this.showModulesTreeView(false);
- }
- this.modulesChanged.fire();
+ this.modulesChanged.fire(undefined);
}
private showModulesTreeView(showModules: boolean) {
@@ -86,6 +91,18 @@ export class DebugSessionTracker
);
}
+ private moduleChangedListener(session: vscode.DebugSession | undefined) {
+ if (!session) {
+ this.showModulesTreeView(false);
+ return;
+ }
+
+ if (session == vscode.debug.activeDebugSession) {
+ const sessionHasModules = this.modules.get(session) != undefined;
+ this.showModulesTreeView(sessionHasModules);
+ }
+ }
+
private onDidSendMessage(
session: vscode.DebugSession,
message: DebugProtocol.ProtocolMessage,
@@ -102,9 +119,6 @@ export class DebugSessionTracker
} else {
modules.push(module);
}
- if (modules.length == 1) {
- this.showModulesTreeView(true);
- }
break;
}
case "removed": {
@@ -119,7 +133,7 @@ export class DebugSessionTracker
break;
}
this.modules.set(session, modules);
- this.modulesChanged.fire();
+ this.modulesChanged.fire(session);
}
}
}
diff --git a/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts b/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts
index 091c1d69ac647..d0fb9270c734f 100644
--- a/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts
+++ b/lldb/tools/lldb-dap/src-ts/ui/modules-data-provider.ts
@@ -52,9 +52,6 @@ export class ModulesDataProvider implements vscode.TreeDataProvider<TreeData> {
constructor(private readonly tracker: DebugSessionTracker) {
tracker.onDidChangeModules(() => this.changeTreeData.fire());
- vscode.debug.onDidChangeActiveDebugSession(() =>
- this.changeTreeData.fire(),
- );
}
getTreeItem(module: TreeData): vscode.TreeItem {
More information about the lldb-commits
mailing list