[Lldb-commits] [lldb] [lldb] Have TestRunLocker run both styles of launch (PR #200978)
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Mon Jun 1 21:04:11 PDT 2026
https://github.com/jasonmolenda updated https://github.com/llvm/llvm-project/pull/200978
>From db19f0cc283d17f45a5c5cfe25d7b858304e80a2 Mon Sep 17 00:00:00 2001
From: Jason Molenda <jmolenda at apple.com>
Date: Mon, 1 Jun 2026 17:39:39 -0700
Subject: [PATCH 1/2] [lldb] Have TestRunLocker run both styles of launch
While debugging flakey behavior with TestRunLocker,
I noticed that is intends to run its test once with
a stop at the entry function (and then Continues)
and once where we launch to the main() loop. But
we were never exercising the stop-at-entry codepath.
This doesn't fix the flakey behavior, although that
only happens with the launch-directly-into-main()
codepath; I don't get failures when I stop at
the entry point and then continue.
---
.../python_api/run_locker/TestRunLocker.py | 26 ++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/lldb/test/API/python_api/run_locker/TestRunLocker.py b/lldb/test/API/python_api/run_locker/TestRunLocker.py
index f84d038b5ed34..16b7623367a05 100644
--- a/lldb/test/API/python_api/run_locker/TestRunLocker.py
+++ b/lldb/test/API/python_api/run_locker/TestRunLocker.py
@@ -28,7 +28,7 @@ def test_run_locker(self):
def test_run_locker_stop_at_entry(self):
"""Test that the run locker is set correctly when we launch"""
self.build()
- self.runlocker_test(False)
+ self.runlocker_test(True)
def setUp(self):
# Call super's setUp().
@@ -43,8 +43,8 @@ def runlocker_test(self, stop_at_entry):
launch_info = target.GetLaunchInfo()
if stop_at_entry:
- flags = launch_info.GetFlags()
- launch_info.SetFlags(flags | lldb.eLaunchFlagStopAtEntry)
+ flags = launch_info.GetLaunchFlags()
+ launch_info.SetLaunchFlags(flags | lldb.eLaunchFlagStopAtEntry)
error = lldb.SBError()
# We are trying to do things when the process is running, so
@@ -69,16 +69,24 @@ def runlocker_test(self, stop_at_entry):
)
state_type = lldb.SBProcess.GetStateFromEvent(event)
- self.assertState(state_type, lldb.eStateRunning, "Didn't get a running event")
+ # A stop_at_entry launch may have already stopped, it may
+ # not be eStateRunning.
+ if stop_at_entry and state_type != lldb.eStateStopped:
+ self.assertState(
+ state_type, lldb.eStateRunning, "Didn't get a running event"
+ )
# We aren't checking the entry state, but just making sure
# the running state is set properly if we continue in this state.
if stop_at_entry:
- event_result = listener.WaitForEvent(10, event)
- self.assertTrue(event_result, "Timed out waiting for stop at entry stop")
- state_type = lldb.SBProcess.GetStateFromEvent(event)
- self.assertState(state_type, eStateStopped, "Stop at entry stopped")
+ if state_type != lldb.eStateStopped:
+ event_result = listener.WaitForEvent(10, event)
+ self.assertTrue(
+ event_result, "Timed out waiting for stop at entry stop"
+ )
+ state_type = lldb.SBProcess.GetStateFromEvent(event)
+ self.assertState(state_type, eStateStopped, "Stop at entry stopped")
process.Continue()
# Okay, now the process is running, make sure we can't do things
@@ -90,7 +98,7 @@ def runlocker_test(self, stop_at_entry):
self.assertIn(
"can't evaluate expressions when the process is running",
repr(val),
- "repr works"
+ "repr works",
)
error = val.GetError()
self.assertTrue(error.Fail(), "Failed to run expression")
>From e9e65e6cbe58228a6aa1c47fe60300b2511319c4 Mon Sep 17 00:00:00 2001
From: Jason Molenda <jmolenda at apple.com>
Date: Mon, 1 Jun 2026 21:03:38 -0700
Subject: [PATCH 2/2] the stop_at_entry case needs to wait after
process.Continue() to see an eStateRunning.
---
lldb/test/API/python_api/run_locker/TestRunLocker.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lldb/test/API/python_api/run_locker/TestRunLocker.py b/lldb/test/API/python_api/run_locker/TestRunLocker.py
index 16b7623367a05..a4831c82ff16d 100644
--- a/lldb/test/API/python_api/run_locker/TestRunLocker.py
+++ b/lldb/test/API/python_api/run_locker/TestRunLocker.py
@@ -88,6 +88,12 @@ def runlocker_test(self, stop_at_entry):
state_type = lldb.SBProcess.GetStateFromEvent(event)
self.assertState(state_type, eStateStopped, "Stop at entry stopped")
process.Continue()
+ event_result = listener.WaitForEvent(10, event)
+ self.assertTrue(event_result, "timed out waiting for launch")
+ state_type = lldb.SBProcess.GetStateFromEvent(event)
+ self.assertState(
+ state_type, lldb.eStateRunning, "Didn't get a running event"
+ )
# Okay, now the process is running, make sure we can't do things
# you aren't supposed to do while running, and that we get some
More information about the lldb-commits
mailing list