Using Python in LLDB on Windows

On Windows, there is no notion of a default python installation. A system may or may not have python installed. And if it did, but was a different version from the python used to build LLDB, we’d see behavior from warnings to modules not loading to crashes.

Because of this, LLDB for Hexagon ships with the python DLLs and Lib directories in …/lib/python27, python27.dll, and is invoked via a batch file that sets PYTHONHOME to …/lib/python27, and PYTHONPATH to …/lib/site-packages (which contains the LLDB python files).

The problem with using a batch file is it intercepts ctrl-c, so that doesn’t work to break into a running program. So I’d like to add code on Windows (inside #ifdef _WIN32) that will set PYTHONHOME and PYTHONPATH if they don’t exist. The values for these would be controlled by a CMAKE build option.


Would this be done by passing the paths you want to add as a command line option to LLDB?

Is the PYTHONHOME actually needed? The CMake already copies python27.dll to the output location, so lldb.exe should be able to find it since it’s side by side.

The paths would be a command line (or gui) option in CMAKE. These would be passed in as a define in the build, and then used by code to set PYTHONHOME and PYTHONPATH right before python is initialized. If PYTHONHOME and PYTHONPATH exist in the environment at runtime the defaults would be ignored.

Seems reasonable to me. I guess you’d do this so that You generate C++ #defines for these two CMake variables, and then during python initialization, if the #defines exist you set them?

One thing to be careful of is that I think lldb.exe modifies sys.path on startup, so as long as it doesn’t stomp on that it’s probably fine.