Author: Charles Zablit Date: 2026-05-07T10:54:38+01:00 New Revision: f93fc5ef3f0e95da24e1391fb013bbd05e2bfd74
URL: https://github.com/llvm/llvm-project/commit/f93fc5ef3f0e95da24e1391fb013bbd05e2bfd74 DIFF: https://github.com/llvm/llvm-project/commit/f93fc5ef3f0e95da24e1391fb013bbd05e2bfd74.diff LOG: [lldb-dap][vscode][windows] check if Python is installed properly before starting lldb-dap (#181124) Added: Modified: lldb/tools/lldb-dap/extension/src/debug-configuration-provider.ts lldb/tools/lldb-dap/tool/lldb-dap.cpp Removed: ################################################################################ diff --git a/lldb/tools/lldb-dap/extension/src/debug-configuration-provider.ts b/lldb/tools/lldb-dap/extension/src/debug-configuration-provider.ts index a3925ecfdfa58..66a42820ec4cf 100644 --- a/lldb/tools/lldb-dap/extension/src/debug-configuration-provider.ts +++ b/lldb/tools/lldb-dap/extension/src/debug-configuration-provider.ts @@ -1,6 +1,7 @@ import * as child_process from "child_process"; import * as util from "util"; import * as vscode from "vscode"; +import * as os from "os"; import { createDebugAdapterExecutable } from "./debug-adapter-factory"; import { LLDBDapServer } from "./lldb-dap-server"; import { LogFilePathProvider } from "./logging"; @@ -76,8 +77,7 @@ export function getDefaultConfigKey( } export class LLDBDapConfigurationProvider - implements vscode.DebugConfigurationProvider -{ + implements vscode.DebugConfigurationProvider { constructor( private readonly server: LLDBDapServer, private readonly logger: vscode.LogOutputChannel, @@ -116,7 +116,7 @@ export class LLDBDapConfigurationProvider ); this.logger.debug( "Initial debug configuration:\n" + - JSON.stringify(debugConfiguration, undefined, 2), + JSON.stringify(debugConfiguration, undefined, 2), ); let config = vscode.workspace.getConfiguration("lldb-dap"); for (const [key, cfg] of Object.entries(configurations)) { @@ -201,6 +201,22 @@ export class LLDBDapConfigurationProvider return undefined; } + if (os.platform() === "win32") { + const pythonCheckProcess = child_process.spawnSync(executable.command, [ + "--check-python", + ]); + if (pythonCheckProcess.status !== 0) { + await vscode.window.showErrorMessage( + "Python is not installed correctly. Please install it to use lldb-dap.", + { + modal: true, + detail: pythonCheckProcess.stderr?.toString() ?? "", + }, + ); + return undefined; + } + } + // Server mode needs to be handled here since DebugAdapterDescriptorFactory // will show an unhelpful error if it returns undefined. We'd rather show a // nicer error message here and allow stopping the debug session gracefully. @@ -233,7 +249,7 @@ export class LLDBDapConfigurationProvider this.logger.info( "Resolved debug configuration:\n" + - JSON.stringify(debugConfiguration, undefined, 2), + JSON.stringify(debugConfiguration, undefined, 2), ); return debugConfiguration; diff --git a/lldb/tools/lldb-dap/tool/lldb-dap.cpp b/lldb/tools/lldb-dap/tool/lldb-dap.cpp index b09e0c7dc9aa9..f9a97563e394c 100644 --- a/lldb/tools/lldb-dap/tool/lldb-dap.cpp +++ b/lldb/tools/lldb-dap/tool/lldb-dap.cpp @@ -671,6 +671,10 @@ int main(int argc, char *argv[]) { #ifdef _WIN32 if (input_args.hasArg(OPT_check_python)) { +#ifndef LLDB_ENABLE_PYTHON + llvm::errs() << "lldb-dap was not built with Python support" << '\n'; + return EXIT_SUCCESS; +#endif auto python_path_or_err = SetupPythonRuntimeLibrary(); if (!python_path_or_err) { llvm::WithColor::error() _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
