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

Reply via email to