1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
"""
Test that the language option for breakpoints works correctly
parser.
"""
from __future__ import print_function
import os
import time
import lldb
from lldbsuite.test.lldbtest import *
import lldbsuite.test.lldbutil as lldbutil
import shutil
import subprocess
class TestBreakpointLanguage(TestBase):
mydir = TestBase.compute_mydir(__file__)
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
# Find the line number to break inside main().
def check_location_file(self, bp, loc, test_name):
bp_loc = bp.GetLocationAtIndex(loc)
addr = bp_loc.GetAddress()
comp_unit = addr.GetCompileUnit()
comp_name = comp_unit.GetFileSpec().GetFilename()
return comp_name == test_name
def test_regex_breakpoint_language(self):
"""Test that the name regex breakpoint commands obey the language filter."""
self.build()
# Create a target by the debugger.
exe = self.getBuildArtifact("a.out")
error = lldb.SBError()
# Don't read in dependencies so we don't come across false matches that
# add unwanted breakpoint hits.
self.target = self.dbg.CreateTarget(exe, None, None, False, error)
self.assertTrue(self.target, VALID_TARGET)
cpp_bp = self.target.BreakpointCreateByRegex(
"func_from",
lldb.eLanguageTypeC_plus_plus,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
cpp_bp.GetNumLocations() == 1,
"Only one C++ symbol matches")
self.assertTrue(self.check_location_file(cpp_bp, 0, "b.cpp"))
c_bp = self.target.BreakpointCreateByRegex(
"func_from",
lldb.eLanguageTypeC,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
c_bp.GetNumLocations() == 1,
"Only one C symbol matches")
self.assertTrue(self.check_location_file(c_bp, 0, "a.c"))
objc_bp = self.target.BreakpointCreateByRegex(
"func_from",
lldb.eLanguageTypeObjC,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
objc_bp.GetNumLocations() == 0,
"No ObjC symbol matches")
def test_by_name_breakpoint_language(self):
"""Test that the name regex breakpoint commands obey the language filter."""
self.build()
# Create a target by the debugger.
exe = self.getBuildArtifact("a.out")
error = lldb.SBError()
# Don't read in dependencies so we don't come across false matches that
# add unwanted breakpoint hits.
self.target = self.dbg.CreateTarget(exe, None, None, False, error)
self.assertTrue(self.target, VALID_TARGET)
cpp_bp = self.target.BreakpointCreateByName(
"func_from_cpp",
lldb.eFunctionNameTypeAuto,
lldb.eLanguageTypeC_plus_plus,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
cpp_bp.GetNumLocations() == 1,
"Only one C++ symbol matches")
self.assertTrue(self.check_location_file(cpp_bp, 0, "b.cpp"))
no_cpp_bp = self.target.BreakpointCreateByName(
"func_from_c",
lldb.eFunctionNameTypeAuto,
lldb.eLanguageTypeC_plus_plus,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
no_cpp_bp.GetNumLocations() == 0,
"And the C one doesn't match")
c_bp = self.target.BreakpointCreateByName(
"func_from_c",
lldb.eFunctionNameTypeAuto,
lldb.eLanguageTypeC,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
c_bp.GetNumLocations() == 1,
"Only one C symbol matches")
self.assertTrue(self.check_location_file(c_bp, 0, "a.c"))
no_c_bp = self.target.BreakpointCreateByName(
"func_from_cpp",
lldb.eFunctionNameTypeAuto,
lldb.eLanguageTypeC,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
no_c_bp.GetNumLocations() == 0,
"And the C++ one doesn't match")
objc_bp = self.target.BreakpointCreateByName(
"func_from_cpp",
lldb.eFunctionNameTypeAuto,
lldb.eLanguageTypeObjC,
lldb.SBFileSpecList(),
lldb.SBFileSpecList())
self.assertTrue(
objc_bp.GetNumLocations() == 0,
"No ObjC symbol matches")
|