[Lldb-commits] [lldb] [lldb-dap] Add module symbol table viewer to VS Code extension #140626 (PR #153836)

Walter Erquinigo via lldb-commits lldb-commits at lists.llvm.org
Mon Aug 18 12:49:12 PDT 2025


================
@@ -0,0 +1,193 @@
+import * as vscode from "vscode";
+import { DebugProtocol } from "@vscode/debugprotocol";
+
+import { DebugSessionTracker } from "../debug-session-tracker";
+import { DisposableContext } from "../disposable-context";
+
+import { DAPSymbolType } from "..";
+import { getDefaultConfigKey } from "../debug-configuration-provider";
+
+export class SymbolsProvider extends DisposableContext {
+  constructor(
+    private readonly tracker: DebugSessionTracker,
+    private readonly extensionContext: vscode.ExtensionContext,
+  ) {
+    super();
+
+    this.pushSubscription(vscode.commands.registerCommand(
+      "lldb-dap.debug.showSymbols",
+      () => {
+        const session = vscode.debug.activeDebugSession;
+        if (!session) return;
+
+        this.SelectModuleAndShowSymbols(session);
+      },
+    ));
+
+    this.pushSubscription(vscode.commands.registerCommand(
+      "lldb-dap.modules.showSymbols",
+      (moduleItem: DebugProtocol.Module) => {
+        const session = vscode.debug.activeDebugSession;
+        if (!session) return;
+
+        this.showSymbolsForModule(session, moduleItem);
+      },
+    ));
+
+    this.tracker.onDidInitializeSession((session) => {
+      this.GetLLDBServerVersion(session).then((version) => {
+        if (version !== undefined) {
+          if (version[0] >= 22) {
+            vscode.commands.executeCommand("setContext", "lldb-dap.supportsModuleSymbolsRequest", true);
+          }
+        }
+      });
----------------
walter-erquinigo wrote:

I'm almost sure that you can use `registerDebugAdapterTrackerFactory` to listen to all the dap messages. You can use `onDidSendMessage(message: any): void` and `onWillReceiveMessage(message: any): void` to check for the response of the initialization request. I'm pretty sure I've done that in the past.

Another way, as you describe, is to have a new command to query capabilities. I wouldn't check the version either. If the command is not supported, it would just return an error and we can just assume it's not supported.

Which approach do you want to take?

https://github.com/llvm/llvm-project/pull/153836


More information about the lldb-commits mailing list