1""" 2Test process attach/resume. 3""" 4 5 6import lldb 7from lldbsuite.test.decorators import * 8from lldbsuite.test.lldbtest import * 9from lldbsuite.test import lldbutil 10 11exe_name = "AttachResume" # Must match Makefile 12 13 14class AttachResumeTestCase(TestBase): 15 NO_DEBUG_INFO_TESTCASE = True 16 17 @skipIfRemote 18 @expectedFailureNetBSD 19 @skipIfWindows # llvm.org/pr24778, llvm.org/pr21753 20 def test_attach_continue_interrupt_detach(self): 21 """Test attach/continue/interrupt/detach""" 22 self.build() 23 self.process_attach_continue_interrupt_detach() 24 25 def process_attach_continue_interrupt_detach(self): 26 """Test attach/continue/interrupt/detach""" 27 28 exe = self.getBuildArtifact(exe_name) 29 30 popen = self.spawnSubprocess(exe) 31 32 self.runCmd("process attach -p " + str(popen.pid)) 33 34 self.setAsync(True) 35 listener = self.dbg.GetListener() 36 process = self.dbg.GetSelectedTarget().GetProcess() 37 38 self.runCmd("c") 39 lldbutil.expect_state_changes(self, listener, process, [lldb.eStateRunning]) 40 41 self.runCmd("process interrupt") 42 lldbutil.expect_state_changes(self, listener, process, [lldb.eStateStopped]) 43 44 # be sure to continue/interrupt/continue (r204504) 45 self.runCmd("c") 46 lldbutil.expect_state_changes(self, listener, process, [lldb.eStateRunning]) 47 48 self.runCmd("process interrupt") 49 lldbutil.expect_state_changes(self, listener, process, [lldb.eStateStopped]) 50 51 # Second interrupt should have no effect. 52 self.expect( 53 "process interrupt", patterns=["Process is not running"], error=True 54 ) 55 56 # check that this breakpoint is auto-cleared on detach (r204752) 57 self.runCmd( 58 "br set -f main.cpp -l %u" 59 % (line_number("main.cpp", "// Set breakpoint here")) 60 ) 61 62 self.runCmd("c") 63 lldbutil.expect_state_changes( 64 self, listener, process, [lldb.eStateRunning, lldb.eStateStopped] 65 ) 66 self.expect("br list", "Breakpoint not hit", substrs=["hit count = 1"]) 67 68 # Make sure the breakpoint is not hit again. 69 self.expect("expr debugger_flag = false", substrs=[" = false"]) 70 71 self.runCmd("c") 72 lldbutil.expect_state_changes(self, listener, process, [lldb.eStateRunning]) 73 74 # make sure to detach while in running state (r204759) 75 self.runCmd("detach") 76 lldbutil.expect_state_changes(self, listener, process, [lldb.eStateDetached]) 77