Fix regression in "commands"
authorTom Tromey <tom@tromey.com>
Fri, 3 Nov 2017 16:26:11 +0000 (10:26 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 7 Dec 2017 21:52:20 +0000 (14:52 -0700)
Pedro pointed out a regression in "commands", where trying to clear a
breakpoint's command list would fail:

    (top-gdb) commands
    Type commands for breakpoint(s) 3, one per line.
    End with a line saying just "end".
    >end
    No breakpoints specified.
    (top-gdb)

I believe the bug was introduced by my patch that changes
counted_command_line to be a shared_ptr.  This causes the problem
because now the counted_command_line in commands_command_1 can be NULL,
whereas previously it never could be.

After some discussion, we agreed to simply remove the error case from
commands_command_1.

2017-12-07  Tom Tromey  <tom@tromey.com>

PR breakpoints/22511:
* breakpoint.c (commands_command_1): Don't throw an exception when
no commands have been read.

2017-12-07  Tom Tromey  <tom@tromey.com>

* gdb.base/break.exp: Add test for empty "commands".

gdb/ChangeLog
gdb/breakpoint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/break.exp

index 8344f6e..3a74e7d 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-07  Tom Tromey  <tom@tromey.com>
+
+       PR breakpoints/22511:
+       * breakpoint.c (commands_command_1): Don't throw an exception when
+       no commands have been read.
+
 2017-12-07  Adam Stylinski  <adam.stylinski@etegent.com>
 
        PR c++/21222
index 76bfd53..59a4dad 100644 (file)
@@ -1272,9 +1272,6 @@ commands_command_1 (const char *arg, int from_tty,
           observer_notify_breakpoint_modified (b);
         }
      });
-
-  if (cmd == NULL)
-    error (_("No breakpoints specified."));
 }
 
 static void
index 7becd10..acad330 100644 (file)
@@ -1,3 +1,7 @@
+2017-12-07  Tom Tromey  <tom@tromey.com>
+
+       * gdb.base/break.exp: Add test for empty "commands".
+
 2017-12-07  Yao Qi  <yao.qi@linaro.org>
 
        * gdb.trace/ftrace.exp (run_trace_experiment): Set breakpoint on
index 96e2f35..87db2dc 100644 (file)
@@ -854,3 +854,15 @@ gdb_test_no_output "set \$foo=81.5" \
 gdb_test "break $srcfile:\$foo" \
     "Convenience variables used in line specs must have integer values.*" \
     "set breakpoint via non-integer convenience variable disallowed"
+
+
+#
+# Test that commands can be cleared without error.
+#
+
+gdb_test "commands\nprint 232323\nend" ">end" "set some breakpoint commands"
+gdb_test "commands\nend" ">end" "clear breakpoint commands"
+# We verify that the commands were cleared by ensuring that the last
+# breakpoint's location ends the output -- if there were commands,
+# they would have been printed after the location.
+gdb_test "info break" "$srcfile:$line" "verify that they were cleared"