Files
clang-p2996/lldb/test/API/commands/process/attach-resume/TestAttachResume.py
Michał Górny 1a1cc0ba7d [lldb] [Platform/POSIX] Use gdb-remote plugin when attaching
Force gdb-remote plugin when attaching using the derivatives
of PlatformPOSIX class.  This is consistent with the behavior
for launching processes (via DebugProcess() method) and guarantees
consistent plugin choice on FreeBSD.

Differential Revision: https://reviews.llvm.org/D92667
2020-12-07 09:56:51 +01:00

93 lines
2.8 KiB
Python

"""
Test process attach/resume.
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
exe_name = "AttachResume" # Must match Makefile
class AttachResumeTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
@skipIfRemote
@expectedFailureNetBSD
@skipIfWindows # llvm.org/pr24778, llvm.org/pr21753
@skipIfReproducer # FIXME: Unexpected packet during (active) replay
def test_attach_continue_interrupt_detach(self):
"""Test attach/continue/interrupt/detach"""
self.build()
self.process_attach_continue_interrupt_detach()
def process_attach_continue_interrupt_detach(self):
"""Test attach/continue/interrupt/detach"""
exe = self.getBuildArtifact(exe_name)
popen = self.spawnSubprocess(exe)
self.runCmd("process attach -p " + str(popen.pid))
self.setAsync(True)
listener = self.dbg.GetListener()
process = self.dbg.GetSelectedTarget().GetProcess()
self.runCmd("c")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateRunning])
self.runCmd("process interrupt")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateStopped])
# be sure to continue/interrupt/continue (r204504)
self.runCmd("c")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateRunning])
self.runCmd("process interrupt")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateStopped])
# Second interrupt should have no effect.
self.expect(
"process interrupt",
patterns=["Process is not running"],
error=True)
# check that this breakpoint is auto-cleared on detach (r204752)
self.runCmd("br set -f main.cpp -l %u" %
(line_number('main.cpp', '// Set breakpoint here')))
self.runCmd("c")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateRunning, lldb.eStateStopped])
self.expect('br list', 'Breakpoint not hit',
substrs=['hit count = 1'])
# Make sure the breakpoint is not hit again.
self.expect("expr debugger_flag = false", substrs=[" = false"])
self.runCmd("c")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateRunning])
# make sure to detach while in running state (r204759)
self.runCmd("detach")
lldbutil.expect_state_changes(
self, listener, process, [
lldb.eStateDetached])