mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 20:45:53 -04:00

Summary: There is nothing we can do with the breakpoint once the associated target becomes deleted. This will make sure we don't hold on to more resources than we need in this case. In particular, this fixes the case TestStepOverBreakpoint on windows, where a lingering SBBreakpoint object causes us to nor unmap the executable file from memory. Reviewers: clayborg, jingham Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D30249 llvm-svn: 296328
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
"""
|
|
Test SBBreakpoint APIs.
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
import os
|
|
import time
|
|
import re
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class BreakpointAPITestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@add_test_categories(['pyapi'])
|
|
def test_breakpoint_is_valid(self):
|
|
"""Make sure that if an SBBreakpoint gets deleted its IsValid returns false."""
|
|
self.build()
|
|
exe = os.path.join(os.getcwd(), "a.out")
|
|
|
|
# Create a target by the debugger.
|
|
target = self.dbg.CreateTarget(exe)
|
|
self.assertTrue(target, VALID_TARGET)
|
|
|
|
# Now create a breakpoint on main.c by name 'AFunction'.
|
|
breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
|
|
#print("breakpoint:", breakpoint)
|
|
self.assertTrue(breakpoint and
|
|
breakpoint.GetNumLocations() == 1,
|
|
VALID_BREAKPOINT)
|
|
|
|
# Now delete it:
|
|
did_delete = target.BreakpointDelete(breakpoint.GetID())
|
|
self.assertTrue(
|
|
did_delete,
|
|
"Did delete the breakpoint we just created.")
|
|
|
|
# Make sure we can't find it:
|
|
del_bkpt = target.FindBreakpointByID(breakpoint.GetID())
|
|
self.assertTrue(not del_bkpt, "We did delete the breakpoint.")
|
|
|
|
# Finally make sure the original breakpoint is no longer valid.
|
|
self.assertTrue(
|
|
not breakpoint,
|
|
"Breakpoint we deleted is no longer valid.")
|
|
|
|
@add_test_categories(['pyapi'])
|
|
def test_target_delete(self):
|
|
"""Make sure that if an SBTarget gets deleted the associated
|
|
Breakpoint's IsValid returns false."""
|
|
|
|
self.build()
|
|
exe = os.path.join(os.getcwd(), "a.out")
|
|
|
|
# Create a target by the debugger.
|
|
target = self.dbg.CreateTarget(exe)
|
|
self.assertTrue(target, VALID_TARGET)
|
|
|
|
# Now create a breakpoint on main.c by name 'AFunction'.
|
|
breakpoint = target.BreakpointCreateByName('AFunction', 'a.out')
|
|
#print("breakpoint:", breakpoint)
|
|
self.assertTrue(breakpoint and
|
|
breakpoint.GetNumLocations() == 1,
|
|
VALID_BREAKPOINT)
|
|
|
|
self.assertTrue(self.dbg.DeleteTarget(target))
|
|
self.assertFalse(breakpoint.IsValid())
|