xref: /llvm-project/lldb/test/API/tools/lldb-server/TestGdbRemoteKill.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1import gdbremote_testcase
2import lldbgdbserverutils
3from lldbsuite.test.decorators import *
4from lldbsuite.test.lldbtest import *
5from lldbsuite.test import lldbutil
6
7
8class TestGdbRemoteKill(gdbremote_testcase.GdbRemoteTestCaseBase):
9    def test_attach_commandline_kill_after_initial_stop(self):
10        self.build()
11        self.set_inferior_startup_attach()
12        reg_expr = r"^\$[XW][0-9a-fA-F]+([^#]*)#[0-9A-Fa-f]{2}"
13        procs = self.prep_debug_monitor_and_inferior()
14        self.test_sequence.add_log_lines(
15            [
16                "read packet: $k#6b",
17                {"direction": "send", "regex": reg_expr},
18            ],
19            True,
20        )
21
22        if self.stub_sends_two_stop_notifications_on_kill:
23            # Add an expectation for a second X result for stubs that send two
24            # of these.
25            self.test_sequence.add_log_lines(
26                [
27                    {"direction": "send", "regex": reg_expr},
28                ],
29                True,
30            )
31
32        self.expect_gdbremote_sequence()
33
34        # Wait a moment for completed and now-detached inferior process to
35        # clear.
36        time.sleep(self.DEFAULT_SLEEP)
37
38        if not lldb.remote_platform:
39            # Process should be dead now. Reap results.
40            poll_result = procs["inferior"].poll()
41            self.assertIsNotNone(poll_result)
42
43        # Where possible, verify at the system level that the process is not
44        # running.
45        self.assertFalse(
46            lldbgdbserverutils.process_is_running(procs["inferior"].pid, False)
47        )
48