Jonas Devlieghere 4aafc479f2 [lldb/Test] Always set the cleanupSubprocesses tear down hook
Always clean up subprocesses on tear down instead of relying on the
caller to do so. This is not only less error prone but also means the
tests can be more concise.

Differential revision: https://reviews.llvm.org/D83787
2020-07-14 14:05:56 -07:00

94 lines
2.9 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
@expectedFailureAll(oslist=['freebsd'], bugnumber='llvm.org/pr19310')
@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])