diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/attach_resume/TestAttachResume.py')
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/attach_resume/TestAttachResume.py | 73 | 
1 files changed, 73 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/functionalities/attach_resume/TestAttachResume.py b/packages/Python/lldbsuite/test/functionalities/attach_resume/TestAttachResume.py new file mode 100644 index 000000000000..693c0a70fd62 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/attach_resume/TestAttachResume.py @@ -0,0 +1,73 @@ +""" +Test process attach/resume. +""" + +from __future__ import print_function + + + +import os, time +import lldb +from lldbsuite.test.lldbtest import * +import lldbsuite.test.lldbutil as lldbutil + +exe_name = "AttachResume"  # Must match Makefile + +class AttachResumeTestCase(TestBase): + +    mydir = TestBase.compute_mydir(__file__) + +    @skipIfRemote +    @expectedFailureFreeBSD('llvm.org/pr19310') +    @expectedFailureWindows("llvm.org/pr24778") +    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 = os.path.join(os.getcwd(), exe_name) + +        popen = self.spawnSubprocess(exe) +        self.addTearDownHook(self.cleanupSubprocesses) + +        self.runCmd("process attach -p " + str(popen.pid)) + +        self.setAsync(True) +        listener = self.dbg.GetListener() + +        self.runCmd("c") +        lldbutil.expect_state_changes(self, listener, [lldb.eStateRunning]) + +        self.runCmd("process interrupt") +        lldbutil.expect_state_changes(self, listener, [lldb.eStateStopped]) + +        # be sure to continue/interrupt/continue (r204504) +        self.runCmd("c") +        lldbutil.expect_state_changes(self, listener, [lldb.eStateRunning]) + +        self.runCmd("process interrupt") +        lldbutil.expect_state_changes(self, listener, [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, [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, [lldb.eStateRunning]) + +        # make sure to detach while in running state (r204759) +        self.runCmd("detach") +        lldbutil.expect_state_changes(self, listener, [lldb.eStateDetached])  | 
