https://github.com/royitaqi updated 
https://github.com/llvm/llvm-project/pull/159481

>From bb9541a27f618326abb1968c0d89313cd38dbbde Mon Sep 17 00:00:00 2001
From: Roy Shi <roy...@meta.com>
Date: Wed, 17 Sep 2025 16:26:06 -0700
Subject: [PATCH 1/2] [vscode-lldb] Restart server when lldb-dap's modification
 time has changed

---
 lldb/tools/lldb-dap/.vscode/launch.json       | 10 +--
 lldb/tools/lldb-dap/package-lock.json         | 66 +++++++++++++++++++
 lldb/tools/lldb-dap/package.json              |  4 ++
 lldb/tools/lldb-dap/src-ts/lldb-dap-server.ts | 31 ++++++---
 4 files changed, 97 insertions(+), 14 deletions(-)

diff --git a/lldb/tools/lldb-dap/.vscode/launch.json 
b/lldb/tools/lldb-dap/.vscode/launch.json
index 8241a5aca0354..524fc2dd5ce7b 100644
--- a/lldb/tools/lldb-dap/.vscode/launch.json
+++ b/lldb/tools/lldb-dap/.vscode/launch.json
@@ -14,11 +14,11 @@
                        ],
                        "outFiles": [
                                "${workspaceFolder}/out/**/*.js"
-                       ],
-                       "preLaunchTask": {
-                               "type": "npm",
-                               "script": "watch"
-                       }
+                       ]
+                       // "preLaunchTask": {
+                       //      "type": "npm",
+                       //      "script": "watch"
+                       // }
                }
        ]
 }
diff --git a/lldb/tools/lldb-dap/package-lock.json 
b/lldb/tools/lldb-dap/package-lock.json
index 26db1ce6df2fd..92143f7f37268 100644
--- a/lldb/tools/lldb-dap/package-lock.json
+++ b/lldb/tools/lldb-dap/package-lock.json
@@ -8,7 +8,11 @@
       "name": "lldb-dap",
       "version": "0.2.16",
       "license": "Apache 2.0 License with LLVM exceptions",
+      "dependencies": {
+        "fs-extra": "^11.3.2"
+      },
       "devDependencies": {
+        "@types/fs-extra": "^11.0.4",
         "@types/node": "^18.19.41",
         "@types/tabulator-tables": "^6.2.10",
         "@types/vscode": "1.75.0",
@@ -835,6 +839,27 @@
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
+    "node_modules/@types/fs-extra": {
+      "version": "11.0.4",
+      "resolved": 
"https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz";,
+      "integrity": 
"sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/jsonfile": "*",
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/jsonfile": {
+      "version": "6.1.4",
+      "resolved": 
"https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz";,
+      "integrity": 
"sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
     "node_modules/@types/node": {
       "version": "18.19.75",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz";,
@@ -1748,6 +1773,20 @@
       "dev": true,
       "optional": true
     },
+    "node_modules/fs-extra": {
+      "version": "11.3.2",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz";,
+      "integrity": 
"sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==",
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=14.14"
+      }
+    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": 
"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz";,
@@ -1877,6 +1916,12 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": 
"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz";,
+      "integrity": 
"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC"
+    },
     "node_modules/has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";,
@@ -2094,6 +2139,18 @@
       "integrity": 
"sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
       "dev": true
     },
+    "node_modules/jsonfile": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz";,
+      "integrity": 
"sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+      "license": "MIT",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
     "node_modules/jsonwebtoken": {
       "version": "9.0.2",
       "resolved": 
"https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz";,
@@ -3182,6 +3239,15 @@
       "integrity": 
"sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
       "dev": true
     },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz";,
+      "integrity": 
"sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
     "node_modules/url-join": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz";,
diff --git a/lldb/tools/lldb-dap/package.json b/lldb/tools/lldb-dap/package.json
index 6566ba3bdee13..3633e292a6264 100644
--- a/lldb/tools/lldb-dap/package.json
+++ b/lldb/tools/lldb-dap/package.json
@@ -27,7 +27,11 @@
   "categories": [
     "Debuggers"
   ],
+  "dependencies": {
+    "fs-extra": "^11.0.4"
+  },
   "devDependencies": {
+    "@types/fs-extra": "^11.0.4",
     "@types/node": "^18.19.41",
     "@types/tabulator-tables": "^6.2.10",
     "@types/vscode": "1.75.0",
diff --git a/lldb/tools/lldb-dap/src-ts/lldb-dap-server.ts 
b/lldb/tools/lldb-dap/src-ts/lldb-dap-server.ts
index 774be50053a17..59dd8a7a6b250 100644
--- a/lldb/tools/lldb-dap/src-ts/lldb-dap-server.ts
+++ b/lldb/tools/lldb-dap/src-ts/lldb-dap-server.ts
@@ -1,3 +1,4 @@
+import * as fs from 'fs-extra';
 import * as child_process from "node:child_process";
 import { isDeepStrictEqual } from "util";
 import * as vscode from "vscode";
@@ -54,7 +55,7 @@ export class LLDBDapServer implements vscode.Disposable {
       return this.serverInfo;
     }
 
-    this.serverInfo = new Promise((resolve, reject) => {
+    this.serverInfo = new Promise(async (resolve, reject) => {
       const process = child_process.spawn(dapPath, dapArgs, options);
       process.on("error", (error) => {
         reject(error);
@@ -82,7 +83,7 @@ export class LLDBDapServer implements vscode.Disposable {
         }
       });
       this.serverProcess = process;
-      this.serverSpawnInfo = this.getSpawnInfo(dapPath, dapArgs, options?.env);
+      this.serverSpawnInfo = await this.getSpawnInfo(dapPath, dapArgs, 
options?.env);
     });
     return this.serverInfo;
   }
@@ -104,13 +105,13 @@ export class LLDBDapServer implements vscode.Disposable {
       return true;
     }
 
-    const newSpawnInfo = this.getSpawnInfo(dapPath, args, env);
+    const newSpawnInfo = await this.getSpawnInfo(dapPath, args, env);
     if (isDeepStrictEqual(this.serverSpawnInfo, newSpawnInfo)) {
       return true;
     }
 
     const userInput = await vscode.window.showInformationMessage(
-      "The arguments to lldb-dap have changed. Would you like to restart the 
server?",
+      "The lldb-dap binary and/or the arguments to it have changed. Would you 
like to restart the server?",
       {
         modal: true,
         detail: `An existing lldb-dap server (${this.serverProcess.pid}) is 
running with different arguments.
@@ -131,8 +132,7 @@ Restarting the server will interrupt any existing debug 
sessions and start a new
     switch (userInput) {
       case "Restart":
         this.serverProcess.kill();
-        this.serverProcess = undefined;
-        this.serverInfo = undefined;
+        this.cleanUp(this.serverProcess);
         return true;
       case "Use Existing":
         return true;
@@ -149,27 +149,40 @@ Restarting the server will interrupt any existing debug 
sessions and start a new
     this.cleanUp(this.serverProcess);
   }
 
-  cleanUp(process: child_process.ChildProcessWithoutNullStreams) {
+  private cleanUp(process: child_process.ChildProcessWithoutNullStreams) {
     // If the following don't equal, then the fields have already been updated
     // (either a new process has started, or the fields were already cleaned
     // up), and so the cleanup should be skipped.
     if (this.serverProcess === process) {
       this.serverProcess = undefined;
       this.serverInfo = undefined;
+      this.serverSpawnInfo = undefined;
     }
   }
 
-  getSpawnInfo(
+  private async getSpawnInfo(
     path: string,
     args: string[],
     env: NodeJS.ProcessEnv | { [key: string]: string } | undefined,
-  ): string[] {
+  ): Promise<string[]> {
     return [
       path,
       ...args,
       ...Object.entries(env ?? {}).map(
         (entry) => String(entry[0]) + "=" + String(entry[1]),
       ),
+      `(${await this.getFileModifiedTimestamp(path)})`,
     ];
   }
+
+  private async getFileModifiedTimestamp(file: string): Promise<string | null> 
{
+    try {
+      if (!(await fs.pathExists(file))) {
+        return null;
+      }
+      return (await fs.promises.stat(file)).mtime.toLocaleString();
+    } catch (error) {
+      return null;
+    }
+  }
 }

>From 4b989d8536bdee440d434f05ccc76c1c4bdc5647 Mon Sep 17 00:00:00 2001
From: Roy Shi <roy...@meta.com>
Date: Thu, 18 Sep 2025 11:27:44 -0700
Subject: [PATCH 2/2] Revert unintended changes

---
 lldb/tools/lldb-dap/.vscode/launch.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/lldb/tools/lldb-dap/.vscode/launch.json 
b/lldb/tools/lldb-dap/.vscode/launch.json
index 524fc2dd5ce7b..8241a5aca0354 100644
--- a/lldb/tools/lldb-dap/.vscode/launch.json
+++ b/lldb/tools/lldb-dap/.vscode/launch.json
@@ -14,11 +14,11 @@
                        ],
                        "outFiles": [
                                "${workspaceFolder}/out/**/*.js"
-                       ]
-                       // "preLaunchTask": {
-                       //      "type": "npm",
-                       //      "script": "watch"
-                       // }
+                       ],
+                       "preLaunchTask": {
+                               "type": "npm",
+                               "script": "watch"
+                       }
                }
        ]
 }

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to