lldb: Set environment variable to detect when running lldb from Creator

Instead of relying on __name__ being 'lldbbridge', which can also
be the case if the lldbbridge.py script is imported into a plain
LLDB process, we can now look at the environment variable.

This also lets us break out early from __lldb_init_module
if the user has a `command script import llbdbridge.py`
in their .lldbinit, or is automatically loading the bridge
via the Qt Core debug script.

Change-Id: Id8168c692ef66ce50119b7426ca85c7bc99d9503
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Tor Arne Vestbø
2023-09-22 22:18:48 +02:00
parent b9e327bb10
commit 7033bbf7e0
2 changed files with 11 additions and 7 deletions

View File

@@ -2068,6 +2068,13 @@ class Tester(Dumper):
lldb.SBDebugger.Destroy(self.debugger) lldb.SBDebugger.Destroy(self.debugger)
if 'QT_CREATOR_LLDB_PROCESS' in os.environ:
# Initialize Qt Creator dumper
try:
theDumper = Dumper()
except Exception as error:
print('@\nstate="enginesetupfailed",error="{}"@\n'.format(error))
# ------------------------------ For use in LLDB ------------------------------ # ------------------------------ For use in LLDB ------------------------------
@@ -2437,6 +2444,9 @@ class SyntheticChildrenProvider(SummaryProvider):
def __lldb_init_module(debugger, internal_dict): def __lldb_init_module(debugger, internal_dict):
# Module is being imported in an LLDB session # Module is being imported in an LLDB session
if 'QT_CREATOR_LLDB_PROCESS' in os.environ:
# Let Qt Creator take care of its own dumper
return
if not __name__ == 'qt': if not __name__ == 'qt':
# Make available under global 'qt' name for consistency, # Make available under global 'qt' name for consistency,
@@ -2471,10 +2481,3 @@ def __lldb_init_module(debugger, internal_dict):
% ("qt.SyntheticChildrenProvider", type_category)) % ("qt.SyntheticChildrenProvider", type_category))
debugger.HandleCommand('type category enable %s' % type_category) debugger.HandleCommand('type category enable %s' % type_category)
if __name__ == "lldbbridge":
try:
theDumper = Dumper()
except Exception as error:
print('@\nstate="enginesetupfailed",error="{}"@\n'.format(error))

View File

@@ -179,6 +179,7 @@ void LldbEngine::setupEngine()
showMessage("STARTING LLDB: " + lldbCmd.toUserOutput()); showMessage("STARTING LLDB: " + lldbCmd.toUserOutput());
Environment environment = runParameters().debugger.environment; Environment environment = runParameters().debugger.environment;
environment.appendOrSet("QT_CREATOR_LLDB_PROCESS", "1");
environment.appendOrSet("PYTHONUNBUFFERED", "1"); // avoid flushing problem on macOS environment.appendOrSet("PYTHONUNBUFFERED", "1"); // avoid flushing problem on macOS
DebuggerItem::addAndroidLldbPythonEnv(lldbCmd, environment); DebuggerItem::addAndroidLldbPythonEnv(lldbCmd, environment);