[Lldb-commits] [PATCH] D119997: Add a little test for simple breaking on overloaded functions by name
Jim Ingham via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Feb 16 17:54:29 PST 2022
jingham created this revision.
jingham added a reviewer: JDevlieghere.
jingham requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
When Jonas made the change to not add demangled names to the name indexes, we were worried it might cause breaking on overloaded functions to stop working. But that's actually not true, anything that uses the Symbol::LookupInfo to search names will do the right thing here, which includes SBModule::FindFunctions and the breakpoint by name resolver. That does the job of extracting the base name, finding potential matches, and then comparing the demangled name of the match to the input string. It's still the case that the names must match exactly.
Anyway, in the course of proving this to myself I wrote a little test for simple overloaded name breakpoints.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D119997
Files:
lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile
lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py
lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp
Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp
@@ -0,0 +1,29 @@
+int a_function(int x) {
+ return x * x;
+}
+
+int a_function(double x) {
+ return static_cast<int>(x * x);
+}
+
+int a_function(double x, int y) {
+ return y * y;
+}
+
+int a_function(int x, double y) {
+ return static_cast<int>(y * y);
+}
+
+int main(int argc, char const *argv[]) {
+ // This is a random comment.
+
+ int int_val = 20;
+ double double_val = 20.0;
+
+ int result = a_function(int_val);
+ result += a_function(double_val);
+ result += a_function(double_val, int_val);
+ result += a_function(int_val, double_val);
+
+ return result;
+}
Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py
@@ -0,0 +1,32 @@
+"""
+Test setting a breakpoint on an overloaded function by name.
+"""
+
+import re
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestBreakpointOnOverload(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ def check_breakpoint(self, name):
+ bkpt = self.target.BreakpointCreateByName(name)
+ self.assertEqual(bkpt.num_locations, 1, "Got one location")
+ addr = bkpt.locations[0].GetAddress()
+ self.assertTrue(addr.function.IsValid(), "Got a real function")
+ self.assertEqual(addr.function.name, name, "Got the right name")
+
+ def test_break_on_overload(self):
+ self.build()
+ self.target = lldbutil.run_to_breakpoint_make_target(self)
+ self.check_breakpoint("a_function(int)")
+ self.check_breakpoint("a_function(double)")
+ self.check_breakpoint("a_function(int, double)")
+ self.check_breakpoint("a_function(double, int)")
+
+
+
Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile
@@ -0,0 +1,4 @@
+CXX_SOURCES := main.cpp
+CXXFLAGS_EXTRAS := -std=c++14
+
+include Makefile.rules
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119997.409464.patch
Type: text/x-patch
Size: 2500 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220217/7d4b6a5f/attachment.bin>
More information about the lldb-commits
mailing list