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