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 <yerimy...@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 <yerimy...@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 <yerimy...@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 <yerimy...@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 { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits