1import lldb 2import unittest 3from lldbsuite.test.lldbtest import * 4from lldbsuite.test.decorators import * 5from lldbsuite.test.gdbclientutils import * 6from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 7 8 9class TestMultiprocess(GDBRemoteTestBase): 10 def test_qfThreadInfo(self): 11 class MyResponder(MockGDBServerResponder): 12 def qfThreadInfo(self): 13 return "mp400.10200,p400.10204,p401.10300,p400.10208" 14 15 self.server.responder = MyResponder() 16 target = self.dbg.CreateTarget("") 17 if self.TraceOn(): 18 self.runCmd("log enable gdb-remote packets") 19 self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) 20 process = self.connect(target) 21 self.assertEqual(process.id, 0x400) 22 self.assertEqual( 23 [process.threads[i].id for i in range(process.num_threads)], 24 [0x10200, 0x10204, 0x10208], 25 ) 26 27 def test_stop_reason(self): 28 class MyResponder(MockGDBServerResponder): 29 def qfThreadInfo(self): 30 return "mp400.10200,p400.10204" 31 32 def cont(self): 33 return "S02thread:p400.10200;" 34 35 self.server.responder = MyResponder() 36 target = self.dbg.CreateTarget("") 37 if self.TraceOn(): 38 self.runCmd("log enable gdb-remote packets") 39 self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets")) 40 process = self.connect(target) 41 process.Continue() 42 self.assertEqual( 43 process.GetThreadByID(0x10200).stop_reason, lldb.eStopReasonSignal 44 ) 45 self.assertEqual( 46 process.GetThreadByID(0x10204).stop_reason, lldb.eStopReasonNone 47 ) 48