[binutils-gdb] gdb/guile: improve the errors when creating breakpoints

Andrew Burgess aburgess@sourceware.org
Fri Jun 25 17:24:43 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=81b327aadd3454a5c855e10180b30b6cafe5fc84

commit 81b327aadd3454a5c855e10180b30b6cafe5fc84
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Mon May 10 09:53:52 2021 +0100

    gdb/guile: improve the errors when creating breakpoints
    
    When creating a breakpoint using the guile API, if an invalid
    breakpoint type number was used then the error would report the wrong
    argument position, like this:
    
      (gdb) guile (define wp2 (make-breakpoint "result" #:wp-class WP_WRITE #:type 999))
      ERROR: In procedure make-breakpoint:
      ERROR: In procedure gdbscm_make_breakpoint: Out of range: invalid breakpoint type in position 3: 999
      Error while executing Scheme code.
      (gdb)
    
    The 'position 3' here is actually pointing at WP_WRITE, when it should
    say 'position 5' and point to the 999.  This commit fixes this.
    
    However, you also get errors like this:
    
      (gdb) guile (define wp2 (make-breakpoint "result" #:wp-class WP_WRITE #:type BP_NONE))
      ERROR: In procedure make-breakpoint:
      ERROR: In procedure gdbscm_make_breakpoint: Out of range: invalid breakpoint type in position 3: 0
      Error while executing Scheme code.
    
    The BP_NONE is a valid breakpoint type, it's just not valid for
    creating breakpoints through the 'make-breakpoint' API.  The use of
    '0' in the error message (which is the value of BP_NONE) is not
    great.  This commit changes the error in this case to:
    
      (gdb) guile (define wp2 (make-breakpoint "result" #:wp-class WP_WRITE #:type BP_NONE))
      ERROR: In procedure make-breakpoint:
      ERROR: In procedure gdbscm_make_breakpoint: unsupported breakpoint type in position 5: "BP_NONE"
      Error while executing Scheme code.
    
    Which seems better; we now use the name of the type, and report that
    this type is unsupported.
    
    gdb/ChangeLog:
    
            * guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
            for invalid breakpoint numbers, and unsupported breakpoint
            numbers.
    
    gdb/testsuite/ChangeLog:
    
            * gdb.guile/scm-breakpoint.exp (test_watchpoints): Add new tests.

Diff:
---
 gdb/ChangeLog                              |  6 ++++++
 gdb/guile/scm-breakpoint.c                 | 13 ++++++++++++-
 gdb/testsuite/ChangeLog                    |  4 ++++
 gdb/testsuite/gdb.guile/scm-breakpoint.exp |  7 +++++++
 4 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 54f1b7bf539..80ccc9f4c85 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* guile/scm-breakpoint.c (gdbscm_make_breakpoint): Split the error
+	for invalid breakpoint numbers, and unsupported breakpoint
+	numbers.
+
 2021-06-25  Tom Tromey  <tom@tromey.com>
 
 	* dwarf2/index-write.c (struct addrmap_index_data): Add
diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c
index 4ff197e48a4..346b00629b0 100644
--- a/gdb/guile/scm-breakpoint.c
+++ b/gdb/guile/scm-breakpoint.c
@@ -387,8 +387,19 @@ gdbscm_make_breakpoint (SCM location_scm, SCM rest)
 				     _("invalid watchpoint class"));
 	}
       break;
+    case bp_none:
+    case bp_hardware_watchpoint:
+    case bp_read_watchpoint:
+    case bp_access_watchpoint:
+      {
+	const char *type_name = bpscm_type_to_string (type);
+	gdbscm_misc_error (FUNC_NAME, type_arg_pos,
+			   gdbscm_scm_from_c_string (type_name),
+			   _("unsupported breakpoint type"));
+      }
+      break;
     default:
-      gdbscm_out_of_range_error (FUNC_NAME, access_type_arg_pos,
+      gdbscm_out_of_range_error (FUNC_NAME, type_arg_pos,
 				 scm_from_int (type),
 				 _("invalid breakpoint type"));
     }
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 040a12fe879..330e7c84f1a 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-25  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.guile/scm-breakpoint.exp (test_watchpoints): Add new tests.
+
 gdb/testsuite/ChangeLog
 2021-06-25  Carl Love  <cel@us.ibm.com>
 
diff --git a/gdb/testsuite/gdb.guile/scm-breakpoint.exp b/gdb/testsuite/gdb.guile/scm-breakpoint.exp
index 56058942e64..0e9e64ed4ae 100644
--- a/gdb/testsuite/gdb.guile/scm-breakpoint.exp
+++ b/gdb/testsuite/gdb.guile/scm-breakpoint.exp
@@ -258,6 +258,13 @@ proc_with_prefix test_watchpoints { } {
     gdb_test "continue" \
 	".*\[Ww\]atchpoint.*result.*Old value = 0.*New value = 25.*main.*" \
 	"test watchpoint write"
+
+    gdb_test "guile (define wp2 (make-breakpoint \"result\" #:wp-class WP_WRITE #:type 999))" \
+	"ERROR: In procedure gdbscm_make_breakpoint: Out of range: invalid breakpoint type in position 5: 999\r\n.*" \
+	"create a breakpoint with an invalid type number"
+    gdb_test "guile (define wp2 (make-breakpoint \"result\" #:wp-class WP_WRITE #:type BP_NONE))" \
+	"ERROR: In procedure gdbscm_make_breakpoint: unsupported breakpoint type in position 5: \"BP_NONE\"\r\n.*" \
+	"create a breakpoint with an unsupported type"
 }
 
 proc_with_prefix test_bkpt_internal { } {


More information about the Gdb-cvs mailing list