| _T = require('lua_lldb_test').create_test('TestBreakpointAPI') | |
| function _T:TestBreakpointIsValid() | |
| local target = self:create_target() | |
| local breakpoint = target:BreakpointCreateByName('AFunction', 'a.out') | |
| assertTrue(breakpoint:IsValid() and breakpoint:GetNumLocations() == 1) | |
| local did_delete = target:BreakpointDelete(breakpoint:GetID()) | |
| assertTrue(did_delete) | |
| local del_bkpt = target:FindBreakpointByID(breakpoint:GetID()) | |
| assertFalse(del_bkpt:IsValid()) | |
| assertFalse(breakpoint:IsValid()) | |
| end | |
| function _T:TestTargetDelete() | |
| local target = self:create_target() | |
| local breakpoint = target:BreakpointCreateByName('AFunction', 'a.out') | |
| assertTrue(breakpoint:IsValid() and breakpoint:GetNumLocations() == 1) | |
| local location = breakpoint:GetLocationAtIndex(0) | |
| assertTrue(location:IsValid()) | |
| assertEqual(target, breakpoint:GetTarget()) | |
| assertTrue(self.debugger:DeleteTarget(target)) | |
| assertFalse(breakpoint:IsValid()) | |
| assertFalse(location:IsValid()) | |
| end | |
| function _T:TestBreakpointHitCount() | |
| local target = self:create_target() | |
| local breakpoint = target:BreakpointCreateByName('BFunction', 'a.out') | |
| assertTrue(breakpoint:IsValid() and breakpoint:GetNumLocations() == 1) | |
| breakpoint:SetAutoContinue(true) | |
| target:LaunchSimple(nil, nil, nil) | |
| assertEqual(breakpoint:GetHitCount(), 100) | |
| end | |
| function _T:TestBreakpointFrame() | |
| local target = self:create_target() | |
| local breakpoint = target:BreakpointCreateByName('main', 'a.out') | |
| assertTrue(breakpoint:IsValid() and breakpoint:GetNumLocations() == 1) | |
| local process = target:LaunchSimple({ 'arg1', 'arg2' }, nil, nil) | |
| local thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) | |
| assertNotNil(thread) | |
| assertTrue(thread:IsValid()) | |
| local frame = thread:GetFrameAtIndex(0) | |
| assertTrue(frame:IsValid()) | |
| local error = lldb.SBError() | |
| local var_argc = frame:FindVariable('argc') | |
| local var_argc_value = var_argc:GetValueAsSigned(error, 0) | |
| assertTrue(error:Success()) | |
| assertEqual(var_argc_value, 3) | |
| end | |
| os.exit(_T:run()) |