[Lldb-commits] [lldb] [lldb-dap] Allow providing debug adapter arguments in the extension (PR #129262)

John Harrison via lldb-commits lldb-commits at lists.llvm.org
Fri Mar 14 15:18:00 PDT 2025


================
@@ -0,0 +1,103 @@
+import * as vscode from "vscode";
+import * as child_process from "child_process";
+import * as util from "util";
+import { LLDBDapServer } from "./lldb-dap-server";
+import { createDebugAdapterExecutable } from "./debug-adapter-factory";
+import { ConfigureButton, showErrorMessage } from "./ui/show-error-message";
+import { ErrorWithNotification } from "./ui/error-with-notification";
+
+const exec = util.promisify(child_process.execFile);
+
+/**
+ * Determines whether or not the given lldb-dap executable supports executing
+ * in server mode.
+ *
+ * @param exe the path to the lldb-dap executable
+ * @returns a boolean indicating whether or not lldb-dap supports server mode
+ */
+async function isServerModeSupported(exe: string): Promise<boolean> {
+  const { stdout } = await exec(exe, ["--help"]);
+  return /--connection/.test(stdout);
+}
+
+export class LLDBDapConfigurationProvider
+  implements vscode.DebugConfigurationProvider
+{
+  constructor(private readonly server: LLDBDapServer) {}
+
+  async resolveDebugConfiguration(
+    folder: vscode.WorkspaceFolder | undefined,
+    debugConfiguration: vscode.DebugConfiguration,
----------------
ashgti wrote:

I wonder if we should have our own type + validator for the debugConfiguration

Something along the lines of:

```ts
interface LLDBDebugConfiguration extends vscode.DebugConfiguration {
  type: 'lldb-dap';
  request: 'launch' | 'attach';
  program: string;
  args?: string[];
  env?: Record<string, string>;
  debugAdapterHostname?: string;
  initCommands?: string[];
  stopOnEntry?: boolean;
}
... 

async resolveDebugConfiguration(folder, config) {
  assert(config, isLLDBDebugConfiguration);
  // config is of type LLDBDebugConfiguration
```

[TypeScript Playground example](https://www.typescriptlang.org/play/?target=9#code/PTAEFkEECUGkC5QDUCGAbAlgExQFwwPYB2oAEgKZoAO5ATgM4BQjuAnjaAMLG7kAeuUAF5Q9XLQxEA5gG0AugG4W7cqAAKeABbDR4ybMXM2HACoqA4gFcUtLAB5JoApcEmAfDoDejUKAAUAG7oiJZEANZEBADuRACUiEFooBj0oCZKvoHBoKER0UQANKAAxjz8uIjcRLwCRVRaAPyIGria8aCJyanpPqBS1rYAcigAtuSIYhLSSgC+yhyw5KyomDi4BLR27l6gMmrJJGFLBABmaXKIZjRWNvYme3JuCqAzSownocX4xKBY5CeScg3WxbNxZVZ4DaIcEhcKRGJFUrVcqVMq1UD1VpNdRaWLCDydFJpIr9W7DMYTPTSArtK5AgZ3DzeXxociCUm2HQwnJw-KItEVLgCnTyOpaDS0XD0ZpaEVyPFCJm9XxIsRdFbYHSJbCQ2jg-nI9GYzQSqWxDK+ZJnPwAQhSGqweOZlpVxDVxp0xtN9AAdKzpK1QA1QAByABiG1DoAA1BjxTYpT6AFYESR+ABE6bxsfTiHToEQIZDFpdSJquB9VEs9E0fgABgASTzGmYAUT4NC+5CwoCbHKw5PIMxJBEETYAUgBlADygx9k30GBOrHBsRmdfNypeW9obMstBI9vQ2Atr16fn7oBQ3QsDNBsR9-cHOifo3IFt3uH3JEv17St9uUFZmYVVBBSAAhAgCFZFASBEP4ASIelAIAIygmCiDBVd8VAYxyFODp0GEIQRBDNDoPIWCQyKMj0MoogQ03UCuknKkpB0BDAWBewF2kLDEgVDw8IIzoSNI3ipGo0MJMYpRmJSacUKTcgvg4-4uLvAglJU3B+PQQTcJUESiLE0MtOUr4Q1AAAyazQBtG1Eho8ydNk95Pm+Q96AAGQwXhaHQLZQHKcgiCwVIiEsEYULoUAAB9dCmdiEvIjCwR9DLMEFe55UuACQW2Z1P2-X51KQ7i-FXBIiKJEwcKyn1JGKNBLD+ehwSvbpYiKRtPAa-0pEDUyAEYg1ALKZAABjkAszKQpwzis2MGpTNMpMY9dNzmD4iC+QgvMgWgAtYacTlBcEdXWWg8uuO93CdXpioPUrEOQ2xKqckoBTFVp2kJbp5Bw51fCXfwbUO47GvoCGUBXAS8SekgTnQeh3x3PdnsSH1yACOgV0CIoMAM7U1g2AmvsNXAihkDKfT8D0GmDeRutAOsZCbDAZjkOt5U3Xxh1ZmHWDsJsSd1R8GUHGY3A3YCdr2n4UmgFSNiwU7zrFq6brexkHt8RGXo024PvQA1yx+tpqqSIlldKEEJKKbZFVAYGrTBhTtK+fUKfNuNfoRjGkZRtGXQNxSLIrUK9HIdqBOx3HaHxmQjlYIpEksch5RwlJWKSvwU7N8pqdp+nZUZ3Z5R6mQQybFOZhDbms9swiISu8EM8L9EaYy0vA3L5mq5rzw64bnnYj5l4ett1W7Ad3tPE1jYJbJN9pdlxhto8-aumnKhPMC9wLtJ67-1uwD7pdx7A8N8qGRNtBO6pv3LZbroeU4pCewSurnddg3hLOKJEioZQgf27FZYM4gM6zUXnqT6ZYi7PwngLOsu995oBFgvY8x9l5DFXjLLa7ldqeRYlAr450wgBAdLqRAixljYN1KCIoeFByUiSnrUABswEVW9ggo0uIrZvx-kqF0oNbQewjrw76SCA5fmesjNAqMSycOvuHHS2NqgSBjvnKhDCrqdVANPe2bFHb5XsLkeEmE3APhxnjSqyclhpz0RsLOv8twg2tDaZWJxWRfB9Joa83sU54mbo5ZxtBcEDjfPOXACZ6AAHU-K1hDGg-agVGIcJdK6SmlZqy1l6saBofpQqDW0MGXuZSmbymTKmIgGYswxlDIWWaRYZjgBSPQfQKiACOlgMC7h7CnUMtclj13Xlky0BsFFKPcduCZBtYF+G8b4isUg2RBKWCzPhT9u50wZlUlmbMh4j0bhPfmyDmEqEHIQohCsSDXlRpKDW2QLF8j6AybW3EmGgBGPQKQ2IJLtAeXQKUr9aqX2yWqbZbD9CAxEPIC0YibT9ikZTceELLSskEPUSUqQRDbJ9LuBOqM-BnLdn4X5Ug8Q4sTFWGsFK-lkqxcFI6kYRA0t9KtOp6YAA6RAszKNaLQaIoAkJRFAK2Vleo6DCtoMgjezAQAQBgAgcaaAsAoQALQ4CoBTAE-QAqeWYJIfyyNiiqG8t5AAIuBK15AUKWCkFUfV+48Db2dHhQsaB1Vap1cWK+vSY6ChDGgFAnxNBWQSiGPAsTigRotFQYVUgAojBhdMXoNgpD0ABWxBFvRQoBGxEYniJjEr6CeL0P4DqpCQB1f5UgBAxBEDfDmpKiKiB+W4CMEYsFwqtthYYXwYgCBUGnEQVsmjWDYlSvRC0wAABUoBaagHncABVjB5I+Wtba+1jrnUYANW6n4Igc5kNwHYS1Nq7XVv3YezyYIPUqEQCkXy-l0B+BDT67VKAqCMQKAGjOYhn0+T8nQd9Iaw27QjTRGNKA41-t6ImggybRjAdzvof9vhM3Sh3nvNJaA-ApCFqdQj9B0PSHHph4KRAAjAdScQd9SsVa2BI6e9h3VK27prXWugDam1vjo3hhjBG2P6A4yDDtuAu09rCjhhSQnm0iehkdWGrGyNsUo70Ydo7x2TsE+g0jkEKKwQ4wLEM1693EBdYa-ablGBKpMEG3CmhVCwN9BlZg8sSG8DEJAegjzz2H0SLCPICJ3m3E+XdNwRRKX9ooxi8QrAMVYf8yC72-YYuMtPCUPAcb-DkEyRTegFE-TIYzJwMNUhNC4HTEUArp510+dwH5gLfhPCGRoF6r9fqii7kDUB0Mobw3QYOJ2gg3be04erigKSAAmOQdQk0psLJoDAVkBYvu3RZp1VmD2us8puJrLW0vtc9YN7rP6pJ9cA8G2D8HCaSek5NxA025sLeo7Rl2AskModTaGVb63CZbqvVx29+39qbiAA)

This would help with the inline type validation being performed here.

I could also follow up this CL with some of these validations. I think they could also help the URL launching service as well.

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


More information about the lldb-commits mailing list