summaryrefslogtreecommitdiff
path: root/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py
diff options
context:
space:
mode:
authorMed Ismail Bennani <medismail.bennani@gmail.com>2021-10-06 00:09:20 +0000
committerMed Ismail Bennani <medismail.bennani@gmail.com>2021-10-08 14:54:07 +0200
commit59d8dd79e1f9dead2dc2756e139073083e487228 (patch)
tree4f45c1452f97e10655c8e69549ab146ee93d0d2c /lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py
parent6393c21d476de2584b3ac010aace6a9b26d5bbec (diff)
[lldb/Plugins] Add support for ScriptedThread in ScriptedProcess
This patch introduces the `ScriptedThread` class with its python interface. When used with `ScriptedProcess`, `ScriptedThreaad` can provide various information such as the thread state, stop reason or even its register context. This can be used to reconstruct the program stack frames using lldb's unwinder. rdar://74503836 Differential Revision: https://reviews.llvm.org/D107585 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
Diffstat (limited to 'lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py')
-rw-r--r--lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py b/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py
index 5cf49ab37791..70ee1a4d6592 100644
--- a/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py
+++ b/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py
@@ -72,6 +72,28 @@ class ScriptedProcesTestCase(TestBase):
self.assertTrue(error.Success(), "Failed to read memory from scripted process.")
self.assertEqual(hello_world, memory_read)
+ self.assertEqual(process.GetNumThreads(), 1)
+
+ thread = process.GetSelectedThread()
+ self.assertTrue(thread, "Invalid thread.")
+ self.assertEqual(thread.GetThreadID(), 0x19)
+ self.assertEqual(thread.GetName(), "MyScriptedThread.thread-1")
+ self.assertEqual(thread.GetStopReason(), lldb.eStopReasonSignal)
+
+ self.assertGreater(thread.GetNumFrames(), 0)
+
+ frame = thread.GetFrameAtIndex(0)
+ register_set = frame.registers # Returns an SBValueList.
+ for regs in register_set:
+ if 'GPR' in regs.name:
+ registers = regs
+ break
+
+ self.assertTrue(registers, "Invalid General Purpose Registers Set")
+ self.assertEqual(registers.GetNumChildren(), 21)
+ for idx, reg in enumerate(registers, start=1):
+ self.assertEqual(idx, int(reg.value, 16))
+
def test_launch_scripted_process_cli(self):
"""Test that we can launch an lldb scripted process from the command
line, check its process ID and read string from memory."""