[PATCH] gdb/testsuite: do not hard-code location indices in condbreak-multi-context.exp
Simon Marchi
simark@simark.ca
Mon Nov 23 17:25:52 GMT 2020
On 2020-10-30 11:06 a.m., Tankut Baris Aktemur via Gdb-patches wrote:
> +proc find_location_contexts {} {
> + global loc_name loc_index bpnum1 fill
> + global decimal hex gdb_prompt
> +
> + gdb_test_multiple "info breakpoint $bpnum1" "find_location_indices" {
> + -re "stop only if ${fill}\r\n" {
> + exp_continue
> + }
> + -re "^${bpnum1}\.($decimal) ${fill} ${hex} in (A|Base|C)::func${fill}\r\n" {
> + set index $expect_out(1,string)
> + set name $expect_out(2,string)
> + set loc_name($index) $name
> + set loc_index($name) $index
> + exp_continue
> + }
> + -re "$gdb_prompt $" {
> + verbose -log "Loc names: $loc_name(1), $loc_name(2), $loc_name(3)"
> + if {($loc_name(1) != $loc_name(2))
> + && ($loc_name(1) != $loc_name(3))
Is the goal to check that all elements are unique? If so, should you
also check that $loc_name(2) != $loc_name(3)? If/when we ever have more
than three elements, it will become interesting to make two for loops
that compare all pairs of elements.
> + && ($loc_name(1) != "")
> + && ($loc_name(2) != "")
> + && ($loc_name(3) != "")} {
> + pass $gdb_test_name
> + } else {
> + fail $gdb_test_name
> + }
Instead of
if { something } {
pass foo
} else {
fail foo
}
You can use the gdb_assert proc:
gdb_assert something foo
And to make it easier to narrow down the issue if that fails, I'd make
separate calls to gdb_assert:
gdb_assert { ![string equal $loc_name(1) $loc_name(2)] }
gdb_assert { ![string equal $loc_name(1) $loc_name(3)] }
gdb_assert { ![string equal $loc_name(2) $loc_name(3)] }
gdb_assert { [string length $loc_name(1)] > 0 }
gdb_assert { [string length $loc_name(2)] > 0 }
gdb_assert { [string length $loc_name(3)] > 0 }
Comparing strings with != would make quoting particularly bad in this
case, that's why I used string equal instead.
> + }
> + }
> +}
>
> -proc test_info_break {suffix} {
> - global bpnum1 bpnum2 fill
> +# Test the breakpoint location enabled states. STATES is a list of
> +# location states. We assume STATES to contain the state for A, Base,
> +# and C, and in this order. E.g. {N* y n} for 'N*' at A::func, 'y' at
> +# B::func, and 'n' at C::func, respectively.
>
> - set bp_hit_info "${fill}(\r\n${fill}breakpoint already hit 1 time)?"
> +proc check_bp_locations {bpnum states cond {msg ""}} {
> + global loc_name fill bpnum1 bpnum2
bpnum1 and bpnum2 are not used in this proc.
Otherwise, LGTM, thanks!
Simon
More information about the Gdb-patches
mailing list