gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 6 May 2021 08:13:06 +0000 (10:13 +0200)
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 6 May 2021 08:46:39 +0000 (10:46 +0200)
Add a '--force-condition' flag to the '-break-insert' command to be
able to force conditions.  Because the '-dprintf-insert' command uses
the same mechanism as the '-break-insert' command, it obtains the
'--force-condition' flag, too.

gdb/ChangeLog:
2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Recognize the
'--force-condition' flag to force the condition in the
'-break-insert' and '-dprintf-insert' commands.
* NEWS: Mention the change.

gdb/testsuite/ChangeLog:
2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* gdb.mi/mi-break.exp (test_forced_conditions): New proc that
is called by the test.

gdb/doc/ChangeLog:
2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* gdb.texinfo (GDB/MI Breakpoint Commands): Mention the
'--force-condition' flag of the '-break-insert' and
'-dprintf-insert' commands.

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/mi/mi-cmd-break.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/mi-break.exp

index 674817cc1b6443c6c84ff800be686a1e71ac4db4..87f366c4b68399b0efb45a035b9d53b2f3fb7a6e 100644 (file)
@@ -1,3 +1,10 @@
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+       * mi/mi-cmd-break.c (mi_cmd_break_insert_1): Recognize the
+       '--force-condition' flag to force the condition in the
+       '-break-insert' and '-dprintf-insert' commands.
+       * NEWS: Mention the change.
+
 2021-05-04  Tom de Vries  <tdevries@suse.de>
 
        PR guile/27806
index 19cb444e7fe80f515a57ad5d14c1dc129b93d97d..a814b41315dd68f5d532d32fea90ce565ccaf3ec 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
     equivalent of the CLI's "break -qualified" and "dprintf
     -qualified".
 
+ ** '-break-insert --force-condition' and '-dprintf-insert --force-condition'
+
+    The MI -break-insert and -dprintf-insert commands now support a
+    '--force-condition' flag to forcibly define a condition even when
+    the condition is invalid at all locations of the breakpoint.  This
+    is equivalent to the '-force-condition' flag of the CLI's "break"
+    command.
+
 * GDB now supports core file debugging for x86_64 Cygwin programs.
 
 * GDB will now look for the .gdbinit file in a config directory before
index ec961d232d1c890b2047d4bae16c1d57ce936c5d..85c09900185a4f1e497a9b8f90547e64001443c0 100644 (file)
@@ -1,3 +1,9 @@
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+       * gdb.texinfo (GDB/MI Breakpoint Commands): Mention the
+       '--force-condition' flag of the '-break-insert' and
+       '-dprintf-insert' commands.
+
 2021-05-04  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * python.texi (Types In Python): Re-organize Type.fields doc.
index 802d0f9cfb6401f80175ffac3d440a18fb254fba..b7667f7d11e776c4ef58040cc846a0ff202663d5 100644 (file)
@@ -30704,7 +30704,7 @@ N.A.
 
 @smallexample
  -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ] [ --qualified ]
-    [ -c @var{condition} ] [ -i @var{ignore-count} ]
+    [ -c @var{condition} ] [ --force-condition ] [ -i @var{ignore-count} ]
     [ -p @var{thread-id} ] [ @var{location} ]
 @end smallexample
 
@@ -30760,6 +30760,9 @@ Create a tracepoint.  @xref{Tracepoints}.  When this parameter
 is used together with @samp{-h}, a fast tracepoint is created.
 @item -c @var{condition}
 Make the breakpoint conditional on @var{condition}.
+@item --force-condition
+Forcibly define the breakpoint even if the condition is invalid at
+all of the breakpoint locations.
 @item -i @var{ignore-count}
 Initialize the @var{ignore-count}.
 @item -p @var{thread-id}
@@ -30829,7 +30832,7 @@ times="0"@}]@}
 
 @smallexample
  -dprintf-insert [ -t ] [ -f ] [ -d ] [ --qualified ]
-    [ -c @var{condition} ] [ -i @var{ignore-count} ]
+    [ -c @var{condition} ] [--force-condition] [ -i @var{ignore-count} ]
     [ -p @var{thread-id} ] [ @var{location} ] [ @var{format} ]
     [ @var{argument} ]
 @end smallexample
@@ -30854,6 +30857,9 @@ cannot be parsed.
 Create a disabled breakpoint.
 @item -c @var{condition}
 Make the breakpoint conditional on @var{condition}.
+@item --force-condition
+Forcibly define the breakpoint even if the condition is invalid at
+all of the breakpoint locations.
 @item -i @var{ignore-count}
 Set the ignore count of the breakpoint (@pxref{Conditions, ignore count})
 to @var{ignore-count}.
index 1b7eaf5e28ff7767dfa094ab19148bda80d30f6b..c73548c2a40cc26e96832af022633ba49a016b79 100644 (file)
@@ -184,12 +184,14 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
   int is_explicit = 0;
   struct explicit_location explicit_loc;
   std::string extra_string;
+  bool force_condition = false;
 
   enum opt
     {
       HARDWARE_OPT, TEMP_OPT, CONDITION_OPT,
       IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT, DISABLE_OPT,
       TRACEPOINT_OPT,
+      FORCE_CONDITION_OPT,
       QUALIFIED_OPT,
       EXPLICIT_SOURCE_OPT, EXPLICIT_FUNC_OPT,
       EXPLICIT_LABEL_OPT, EXPLICIT_LINE_OPT
@@ -204,6 +206,7 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
     {"f", PENDING_OPT, 0},
     {"d", DISABLE_OPT, 0},
     {"a", TRACEPOINT_OPT, 0},
+    {"-force-condition", FORCE_CONDITION_OPT, 0},
     {"-qualified", QUALIFIED_OPT, 0},
     {"-source" , EXPLICIT_SOURCE_OPT, 1},
     {"-function", EXPLICIT_FUNC_OPT, 1},
@@ -270,6 +273,9 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
          is_explicit = 1;
          explicit_loc.line_offset = linespec_parse_line_offset (oarg);
          break;
+       case FORCE_CONDITION_OPT:
+         force_condition = true;
+         break;
        }
     }
 
@@ -354,7 +360,7 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc)
 
   create_breakpoint (get_current_arch (), location.get (), condition, thread,
                     extra_string.c_str (),
-                    false,
+                    force_condition,
                     0 /* condition and thread are valid.  */,
                     temp_p, type_wanted,
                     ignore_count,
index c84f1168cf57ddf5b65a4134319da9f8bcbc7bf8..7de5a0d49879613e4f05abe83c5757cdbce04466 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+       * gdb.mi/mi-break.exp (test_forced_conditions): New proc that
+       is called by the test.
+
 2021-05-05  Tom de Vries  <tdevries@suse.de>
 
        * gdb.threads/detach-step-over.exp: Do exp_continue when encountering
index b2db2d41d1fcf4e1df451134067704e787c9e2ad..3b264ecdebd206b1f37b236c1751133deb3355e6 100644 (file)
@@ -408,6 +408,24 @@ proc_with_prefix test_explicit_breakpoints {} {
        ".*Source filename requires function, label, or line offset.*"
 }
 
+# Test forcing an invalid condition.
+
+proc_with_prefix test_forced_conditions {} {
+    set warning ".*warning: failed to validate condition .* disabling.*"
+
+    set loc [mi_make_breakpoint_loc -enabled "N"]
+    set args [list -cond "bad" -locations "\\\[$loc\\\]"]
+    set bp [eval mi_make_breakpoint_multi $args]
+
+    mi_gdb_test "-break-insert -c bad --force-condition callme" \
+       "${warning}\\^done,$bp" \
+       "breakpoint with forced condition"
+
+    mi_gdb_test "-dprintf-insert -c bad --force-condition callme \"Hello\"" \
+        "${warning}\\^done,$bp" \
+        "dprintf with forced condition"
+}
+
 proc test_break {mi_mode} {
     global srcdir subdir binfile
 
@@ -440,6 +458,8 @@ proc test_break {mi_mode} {
     test_abreak_creation
 
     test_explicit_breakpoints
+
+    test_forced_conditions
 }
 
 if [gdb_debug_enabled] {