gdb/testsuite: show evaluation errors in gdb_assert

Let's say you put this gdb_assert in a test:

    gdb_assert "some invalid tcl code"

You just get:

    FAIL: gdb.base/template.exp: some invalid tcl code

That's not very easy to debug, since you don't know what's invalid in
your code.

Change gdb_assert to print the error message when catch's return code is
1 (TCL_ERROR).  The "warning" is shown both on stdout and in the log
file.  Mark the test as unresolved, because the evaluation error means
we couldn't reach a valid pass/fail conclusion.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_assert): Show error message on error.

Change-Id: Ie6477859554e909ed8d07fb2769c6f2f55e7cce6
This commit is contained in:
Simon Marchi
2020-11-23 17:26:00 -05:00
parent 891615f060
commit 15a491af3c
2 changed files with 12 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2020-11-23 Simon Marchi <simon.marchi@efficios.com>
* lib/gdb.exp (gdb_assert): Show error message on error.
2020-11-23 Tom de Vries <tdevries@suse.de>
* gdb.ada/enum_idx_packed.exp: Limit setup_kfail to gnat 9 and 10.

View File

@ -1728,7 +1728,14 @@ proc gdb_assert { condition {message ""} } {
}
set code [catch {uplevel 1 expr $condition} res]
if {$code != 0 || !$res} {
if {$code == 1} {
# If code is 1 (TCL_ERROR), it means evaluation failed and res contains
# an error message. Print the error message, and set res to 0 since we
# want to return a boolean.
warning "While evaluating expression in gdb_assert: $res"
unresolved $message
set res 0
} elseif { !$res } {
fail $message
} else {
pass $message