diff --git a/.vscode/launch.json b/.vscode/launch.json index 6ee144cf7..a6ceb4fc2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -15,7 +15,11 @@ "outFiles": [ "${workspaceRoot}/extensions/ql-vscode/out/**/*.js", ], - "preLaunchTask": "Build" + "preLaunchTask": "Build", + "env": { + // uncomment to allow debugging the language server Java process from a remote java debugger + // "DEBUG_LANGUAGE_SERVER": "true" + } }, { "name": "Launch Unit Tests (vscode-codeql)", diff --git a/extensions/ql-vscode/src/ide-server.ts b/extensions/ql-vscode/src/ide-server.ts index 0efcb7708..2f8ba2808 100644 --- a/extensions/ql-vscode/src/ide-server.ts +++ b/extensions/ql-vscode/src/ide-server.ts @@ -11,11 +11,15 @@ import { ideServerLogger } from './logging'; /** Starts a new CodeQL language server process, sending progress messages to the status bar. */ export async function spawnIdeServer(config: QueryServerConfig): Promise { return window.withProgress({ title: 'CodeQL language server', location: ProgressLocation.Window }, async (progressReporter, _) => { + const args = ['--check-errors', 'ON_CHANGE']; + if (shouldDebug()) { + args.push('-J=-agentlib:jdwp=transport=dt_socket,address=localhost:9009,server=y,suspend=n,quiet=y'); + } const child = cli.spawnServer( config.codeQlPath, 'CodeQL language server', ['execute', 'language-server'], - ['--check-errors', 'ON_CHANGE'], + args, ideServerLogger, data => ideServerLogger.log(data.toString(), { trailingNewline: false }), data => ideServerLogger.log(data.toString(), { trailingNewline: false }), @@ -24,3 +28,9 @@ export async function spawnIdeServer(config: QueryServerConfig): Promise