[Lldb-commits] [lldb] r282103 - Probably should add the breakpoint names test directory as well...

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 21 12:21:39 PDT 2016


Author: jingham
Date: Wed Sep 21 14:21:38 2016
New Revision: 282103

URL: http://llvm.org/viewvc/llvm-project?rev=282103&view=rev
Log:
Probably should add the breakpoint names test directory as well...

Added:
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/Makefile
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/main.c

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/Makefile?rev=282103&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/Makefile (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/Makefile Wed Sep 21 14:21:38 2016
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+C_SOURCES := main.c
+
+include $(LEVEL)/Makefile.rules

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py?rev=282103&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/TestBreakpointNames.py Wed Sep 21 14:21:38 2016
@@ -0,0 +1,141 @@
+"""
+Test breakpoint names.
+"""
+
+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 BreakpointNames(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @add_test_categories(['pyapi'])
+    def test_setting_names(self):
+        """Use Python APIs to test that we can set breakpoint names."""
+        self.build()
+        self.setup_target()
+        self.do_check_names()
+
+    def test_illegal_names(self):
+        """Use Python APIs to test that we don't allow illegal names."""
+        self.build()
+        self.setup_target()
+        self.do_check_illegal_names()
+
+    def test_using_names(self):
+        """Use Python APIs to test that operations on names works correctly."""
+        self.build()
+        self.setup_target()
+        self.do_check_using_names()
+
+    def setup_target(self):
+        exe = os.path.join(os.getcwd(), "a.out")
+
+        # Create a targets we are making breakpoint in and copying to:
+        self.target = self.dbg.CreateTarget(exe)
+        self.assertTrue(self.target, VALID_TARGET)
+        self.main_file_spec = lldb.SBFileSpec(os.path.join(os.getcwd(), "main.c"))
+        
+    def setUp(self):
+        # Call super's setUp().
+        TestBase.setUp(self)
+
+    def do_check_names(self):
+        """Use Python APIs to check that we can set & retrieve breakpoint names"""
+        bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
+        bkpt_name = "ABreakpoint"
+        other_bkpt_name = "_AnotherBreakpoint"
+
+        # Add a name and make sure we match it:
+        success = bkpt.AddName(bkpt_name)
+        self.assertTrue(success, "We couldn't add a legal name to a breakpoint.")
+
+        matches = bkpt.MatchesName(bkpt_name)
+        self.assertTrue(matches, "We didn't match the name we just set")
+        
+        # Make sure we don't match irrelevant names:
+        matches = bkpt.MatchesName("NotABreakpoint")
+        self.assertTrue(not matches, "We matched a name we didn't set.")
+
+        # Add another name, make sure that works too:
+        bkpt.AddName(other_bkpt_name)
+
+        matches = bkpt.MatchesName(bkpt_name)
+        self.assertTrue(matches, "Adding a name means we didn't match the name we just set")
+
+        # Remove the name and make sure we no longer match it:
+        bkpt.RemoveName(bkpt_name)
+        matches = bkpt.MatchesName(bkpt_name)
+        self.assertTrue(not matches,"We still match a name after removing it.")
+
+        # Make sure the name list has the remaining name:
+        name_list = lldb.SBStringList()
+        bkpt.GetNames(name_list)
+        num_names = name_list.GetSize()
+        self.assertTrue(num_names == 1, "Name list has %d items, expected 1."%(num_names))
+        
+        name = name_list.GetStringAtIndex(0)
+        self.assertTrue(name == other_bkpt_name, "Remaining name was: %s expected %s."%(name, other_bkpt_name))
+
+    def do_check_illegal_names(self):
+        """Use Python APIs to check that we reject illegal names."""
+        bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
+        success = bkpt.AddName("-CantStartWithADash")
+        self.assertTrue(not success,"We allowed a name starting with a dash.")
+
+        success = bkpt.AddName("1CantStartWithANumber")
+        self.assertTrue(not success, "We allowed a name starting with a number.")
+
+        success = bkpt.AddName("^CantStartWithNonAlpha")
+        self.assertTrue(not success, "We allowed a name starting with an ^.")
+
+        success = bkpt.AddName("CantHave-ADash")
+        self.assertTrue(not success, "We allowed a name with a dash in it.")
+
+        success = bkpt.AddName("Cant Have Spaces")
+        self.assertTrue(not success, "We allowed a name with spaces.")
+
+        # Check from the command line as well:
+        retval =lldb.SBCommandReturnObject()
+        self.dbg.GetCommandInterpreter().HandleCommand("break set -n whatever -N has-dashes", retval)
+        self.assertTrue(not retval.Succeeded(), "break set succeeded with: illegal name")
+        
+    def do_check_using_names(self):
+        """Use Python APIs to check names work in place of breakpoint ID's."""
+        
+        bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
+        bkpt_name = "ABreakpoint"
+        other_bkpt_name= "_AnotherBreakpoint"
+
+        # Add a name and make sure we match it:
+        success = bkpt.AddName(bkpt_name)
+        self.assertTrue(success, "We couldn't add a legal name to a breakpoint.")
+
+        bkpts = lldb.SBBreakpointList(self.target)
+        self.target.FindBreakpointsByName(bkpt_name, bkpts)
+
+        self.assertTrue(bkpts.GetSize() == 1, "One breakpoint matched.")
+        found_bkpt = bkpts.GetBreakpointAtIndex(0)
+        self.assertTrue(bkpt.GetID() == found_bkpt.GetID(),"The right breakpoint.")
+
+        retval = lldb.SBCommandReturnObject()
+        self.dbg.GetCommandInterpreter().HandleCommand("break disable %s"%(bkpt_name), retval)
+        self.assertTrue(retval.Succeeded(), "break disable failed with: %s."%(retval.GetError()))
+        self.assertTrue(not bkpt.IsEnabled(), "We didn't disable the breakpoint.")
+
+        # Also make sure we don't apply commands to non-matching names:
+        self.dbg.GetCommandInterpreter().HandleCommand("break modify --one-shot 1 %s"%(bkpt_name), retval)
+        self.assertTrue(retval.Succeeded(), "break modify failed with: %s."%(retval.GetError()))
+        self.assertTrue(not bkpt.IsOneShot(), "We applied one-shot to the wrong breakpoint.")
+
+        
+        

Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/main.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/main.c?rev=282103&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/main.c (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_names/main.c Wed Sep 21 14:21:38 2016
@@ -0,0 +1,54 @@
+//===-- main.c --------------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#include <stdio.h>
+
+// This simple program is to demonstrate the capability of the lldb command
+// "breakpoint modify -i <count> breakpt-id" to set the number of times a
+// breakpoint is skipped before stopping.  Ignore count can also be set upon
+// breakpoint creation by 'breakpoint set ... -i <count>'.
+
+int a(int);
+int b(int);
+int c(int);
+
+int a(int val)
+{
+    if (val <= 1)
+        return b(val);
+    else if (val >= 3)
+        return c(val); // a(3) -> c(3) Find the call site of c(3).
+
+    return val;
+}
+
+int b(int val)
+{
+    return c(val);
+}
+
+int c(int val)
+{
+    return val + 3; // Find the line number of function "c" here.
+}
+
+int main (int argc, char const *argv[])
+{
+    int A1 = a(1);  // a(1) -> b(1) -> c(1)
+    printf("a(1) returns %d\n", A1);
+    
+    int B2 = b(2);  // b(2) -> c(2) Find the call site of b(2).
+    printf("b(2) returns %d\n", B2);
+    
+    int A3 = a(3);  // a(3) -> c(3) Find the call site of a(3).
+    printf("a(3) returns %d\n", A3);
+    
+    int C1 = c(5); // Find the call site of c in main.
+    printf ("c(5) returns %d\n", C1);
+    return 0;
+}




More information about the lldb-commits mailing list