[Lldb-commits] [PATCH] D127038: Add some documentation for the "breakpoint name" feature

Jim Ingham via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 3 17:12:22 PDT 2022

jingham created this revision.
jingham added reviewers: kastiglione, mib, JDevlieghere, clayborg.
Herald added a project: All.
jingham requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

breakpoint names have a bunch of uses, some obvious and some not so (to anyone who was not me...) so it seemed worthwhile to add some documentation.  I hung it off the "breakpoint name" command - that's the natural place to look when you are browsing the command set.

This seems clear to me, but it would be useful to know if it is so to others, or how to make it so...

  rG LLVM Github Monorepo



Index: lldb/source/Commands/CommandObjectBreakpoint.cpp
--- lldb/source/Commands/CommandObjectBreakpoint.cpp
+++ lldb/source/Commands/CommandObjectBreakpoint.cpp
@@ -2018,7 +2018,93 @@
   CommandObjectBreakpointName(CommandInterpreter &interpreter)
       : CommandObjectMultiword(
-            interpreter, "name", "Commands to manage name tags for breakpoints",
+            interpreter, "name", 
+            R"(
+Commands to manage "breakpoint names".  
+Breakpoint names provide a general tagging mechanism for breakpoints.  Each 
+breakpoint name can be added to any number of breakpoints, and each breakpoint 
+can have any number of breakpoint names attached to it. For instance:
+    (lldb) break name add -N MyName 1-10
+adds the name MyName to breakpoints 1-10, and:
+    (lldb) break set -n myFunc -N Name1 -N Name2
+adds two names to the breakpoint set at myFunc.
+They have a number of interrelated uses:
+1) They provide a stable way to refer to a breakpoint (e.g. in another 
+breakpoint's action). Using the breakpoint ID for this purpose is fragile, since
+it depends on the order of breakpoint creation.  Giving a name to the breakpoint
+you want to act on, and then referring to it by name, is more robust:
+    (lldb) break set -n myFunc -N BKPT1
+    (lldb) break set -n myOtherFunc -C "break disable BKPT1"
+2) This is actually just a specific use of a more general feature of breakpoint
+names.  The <breakpt-id-list> argument type used to specify one or more 
+breakpoints in most of the commands that deal with breakpoints also accepts 
+breakpoint names.  That allows you to refer to one breakpoint in a stable 
+manner, but also makes them a convenient grouping mechanism, allowing you to 
+easily act on a group of breakpoints by using their name, for instance disabling
+them all in one action:
+    (lldb) break set -n myFunc -N Group1
+    (lldb) break set -n myOtherFunc -N Group1
+    (lldb) break disable Group1
+3) But breakpoint names are also entities in their own right, and can be 
+configured with all the modifiable attributes of a breakpoint.  Then when you 
+add a breakpoint name to a breakpoint, the breakpoint will be configured to 
+match the state of the breakpoint name.  The link between the name and the 
+breakpoints sharing it remains live, so if you change the configuration on the 
+name, it will also change the configurations on the breakpoints:
+    (lldb) break name configure -i 10 IgnoreSome
+    (lldb) break set -n myFunc -N IgnoreSome
+    (lldb) break list IgnoreSome
+    2: name = 'myFunc', locations = 0 (pending) Options: ignore: 10 enabled 
+      Names:
+        IgnoreSome
+    (lldb) break name configure -i 5 IgnoreSome
+    (lldb) break list IgnoreSome
+    2: name = 'myFunc', locations = 0 (pending) Options: ignore: 5 enabled 
+      Names:
+        IgnoreSome
+Options that are not configured on a breakpoint name don't affect the value of 
+those options on the breakpoints they are added to.  So for instance, if Name1
+has the -i option configured and Name2 the -c option, adding both names to a 
+breakpoint will set the -i option from Name1 and the -c option from Name2, and
+the other options will be unaltered.
+If you add multiple names to a breakpoint which  have configured values for
+the same option, the last name added's value wins.
+The "liveness" of these settings is one way, from name to breakpoint.  
+If you use break modify to change an option that is also configured on a name 
+which that breakpoint has, the "break modify" command will override the setting 
+for that breakpoint, but won't change the value configured in the name or on the
+other breakpoints sharing that name.
+4) Breakpoint names are also a convenient way to copy option sets from one 
+breakpoint to another.  Using the -B option to "breakpoint name configure" makes
+a name configured with all the options of the original breakpoint.  Then 
+adding that name to another breakpoint copies over all the values from the 
+original breakpoint to the new one.
+5) You can also use breakpoint names to hide breakpoints from normal breakpoint
+operations (list, delete and disable) by running "break name configure -N 
+<Name>" and specifying the --allow-{list,delete,disable} options and then adding 
+that name to a breakpoint.  This won't keep the breakpoint from being deleted 
+or disabled if you refer to it specifically by ID, but "break delete" and 
+"break disable" to delete or disable ALL breakpoints won't delete the ones 
+sharing the name, and "break list" won't show them.
             "breakpoint name <subcommand> [<command-options>]") {
     CommandObjectSP add_command_object(
         new CommandObjectBreakpointNameAdd(interpreter));

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127038.434210.patch
Type: text/x-patch
Size: 4845 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220604/43744071/attachment.bin>

More information about the lldb-commits mailing list