xref: /llvm-project/lldb/test/API/functionalities/gdb_remote_client/TestMultiprocess.py (revision 4cc8f2a017c76af25234afc7c380550e9c93135c)
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