reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    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
"""
Test that the language option for breakpoints works correctly
parser.
"""

from __future__ import print_function


import lldb
from lldbsuite.test.lldbtest import *
import lldbsuite.test.lldbutil as lldbutil


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")