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 mydir = TestBase.compute_mydir(__file__) 13 14 def test_qfThreadInfo(self): 15 class MyResponder(MockGDBServerResponder): 16 def qfThreadInfo(self): 17 return "mp400.10200,p400.10204,p401.10300,p400.10208" 18 19 self.server.responder = MyResponder() 20 target = self.dbg.CreateTarget('') 21 if self.TraceOn(): 22 self.runCmd("log enable gdb-remote packets") 23 self.addTearDownHook( 24 lambda: self.runCmd("log disable gdb-remote packets")) 25 process = self.connect(target) 26 self.assertEqual(process.id, 0x400) 27 self.assertEqual( 28 [process.threads[i].id for i in range(process.num_threads)], 29 [0x10200, 0x10204, 0x10208]) 30 31 def test_stop_reason(self): 32 class MyResponder(MockGDBServerResponder): 33 def qfThreadInfo(self): 34 return "mp400.10200,p400.10204" 35 36 def cont(self): 37 return "S02thread:p400.10200;" 38 39 self.server.responder = MyResponder() 40 target = self.dbg.CreateTarget('') 41 if self.TraceOn(): 42 self.runCmd("log enable gdb-remote packets") 43 self.addTearDownHook( 44 lambda: self.runCmd("log disable gdb-remote packets")) 45 process = self.connect(target) 46 process.Continue() 47 self.assertEqual(process.GetThreadByID(0x10200).stop_reason, 48 lldb.eStopReasonSignal) 49 self.assertEqual(process.GetThreadByID(0x10204).stop_reason, 50 lldb.eStopReasonNone) 51