diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -410,30 +410,40 @@ return g_spec; } +static const char GetInterpreterInfoScript[] = R"( +import os +import sysconfig +import sys + +def main(lldb_python_dir): + info = { + "lldb-pythonpath": lldb_python_dir, + "language": "python", + "prefix": sys.prefix, + } + sc = sysconfig.get_config_vars() + if os.name == 'nt': + if sc['EXT_SUFFIX'].startswith("_d"): + exename = "python_d.exe" + else: + exename = "python.exe" + info['executable'] = os.path.normpath(os.path.join(sys.prefix, exename)) + elif os.name == 'posix': + exename = "python" + str(sys.version_info[0]) + info['executable'] = os.path.join(sys.prefix, 'bin', exename) + return info + +)"; + + StructuredData::DictionarySP ScriptInterpreterPython::GetInterpreterInfo() { GIL gil; FileSpec python_dir_spec = GetPythonDir(); if (!python_dir_spec) return nullptr; PythonString python_dir(python_dir_spec.GetPath()); - PythonDictionary info(PyInitialValue::Empty); - llvm::Error error = info.SetItem("lldb-pythonpath", python_dir); - if (error) - return nullptr; - static const char script[] = R"( -def main(info): - import sys - import os - name = 'python' + str(sys.version_info.major) - info.update({ - "language": "python", - "prefix": sys.prefix, - "executable": os.path.join(sys.prefix, "bin", name), - }) - return info -)"; - PythonScript get_info(script); - auto info_json = unwrapIgnoringErrors(As(get_info(info))); + PythonScript get_info(GetInterpreterInfoScript); + auto info_json = unwrapIgnoringErrors(As(get_info(python_dir))); if (!info_json) return nullptr; return info_json.CreateStructuredDictionary();