[gdb/testsuite] Fix silent timeouts in gdb.mi/mi-exec-run.exp with remote host
authorTom de Vries <tdevries@suse.de>
Thu, 27 Oct 2022 14:53:12 +0000 (16:53 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 27 Oct 2022 14:53:12 +0000 (16:53 +0200)
I noticed that running test-case gdb.mi/mi-exec-run.exp with host board
local-remote-host.exp takes about 44 seconds.

I found two silent timeouts responsible for this.

The first is in mi_gdb_exit, where we have:
...
    if { [is_remote host] && [board_info host exists fileid] } {
        send_gdb "999-gdb-exit\n"
        gdb_expect 10 {
            -re "y or n" {
                send_gdb "y\n"
                exp_continue
            }
            -re "Undefined command.*$gdb_prompt $" {
                send_gdb "quit\n"
                exp_continue
            }
            -re "DOSEXIT code" { }
        }
    }
...
so in gdb.log we see:
...
999-gdb-exit^M
999^exit^M
=thread-exited,id="1",group-id="i1"^M
=thread-group-exited,id="i1"^M
...
after which expect just waits for the timeout.

Fix this by adding a gdb_expect clause to parse the exit:
...
            -re "\r\n999\\^exit\r\n" { }
...

Note that we're not parsing the thread-exited/thread-group-exited messages, because
they may not be present:
...
$ gdb -i=mi
=thread-group-added,id="i1"
(gdb)
999-gdb-exit
999^exit
$
...

After fixing that, we have:
...
(gdb) ^M
saw mi error
PASS: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: \
  force-fail=1: run failure detected
quit^M
&"quit\n"^M
...

What seems to be happening is that default_gdb_exit sends a cli interpreter
quit command to an mi interpreter, after which again expect just waits for the
timeout.

Fix this by adding mi_gdb_exit to the end of the test-case, as in many other
gdb.mi/*.exp test-cases.

After these two fixes, the test-case takes about 4 seconds.

Tested on x86_64-linux.

gdb/testsuite/gdb.mi/mi-exec-run.exp
gdb/testsuite/lib/mi-support.exp

index 3b373b2c84d7458ccae8a84937f1ccb91e7e31c2..01f52e22578b059fa789f934c38c7cba03886a77 100644 (file)
@@ -180,3 +180,5 @@ foreach_with_prefix inferior-tty {"main" "separate"} {
        }
     }
 }
+
+mi_gdb_exit
index e537d3b546bf6f693ed942eb70561626a7967c14..b11457693be82e88ef7f0fb2d4ce54e0c7f63290 100644 (file)
@@ -83,7 +83,7 @@ proc mi_uncatched_gdb_exit {} {
                exp_continue
            }
            -re "DOSEXIT code" { }
-           default { }
+           -re "\r\n999\\^exit\r\n" { }
        }
     }