This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
unbreak the 'stepping' alias for 'while-stepping'
- From: Pedro Alves <pedro at codesourcery dot com>
- To: gdb-patches at sourceware dot org
- Date: Sun, 28 Mar 2010 19:10:04 +0100
- Subject: unbreak the 'stepping' alias for 'while-stepping'
The 'stepping' alias for 'while-stepping' got broken with
the recent tracepoints actions / breakpoint commands merge.
(GDB doesn't realize it starts a new command block, and also
later crashes at tstart.)
Bad:
(gdb) actions
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
>stepping 10
>end
(gdb) tstart
Segmentation fault
Good:
(gdb) actions
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
>while-stepping 10
>end
>end
(gdb) tstart
(gdb)
I've applied the patch below to fix it. Given that the 'ws' alias
was broken the same way in our tree at some point,
I'm tweaking the while-dyn.exp test to exercise all while-stepping
aliases. I took the opportunity to clean up the test file a bit, by
making it use gdb_test_multiple instead of send_gdb/gdb_expect.
I've tested this against a gdbserver that supports tracepoints. The
new tests fail with an unfixed GDB.
--
Pedro Alves
2010-03-28 Pedro Alves <pedro@codesourcery.com>
gdb/
* cli/cli-script.c (process_next_line): Handle 'stepping'.
2010-03-28 Pedro Alves <pedro@codesourcery.com>
gdb/testsuite/
* gdb.trace/while-dyn.exp (executable): New variable.
(binfile): Use it.
(test_while_stepping): New function. Move most tests here. Call
it once for each of the while-stepping, stepping and ws aliases.
---
gdb/cli/cli-script.c | 3 -
gdb/testsuite/gdb.trace/while-dyn.exp | 80 ++++++++++++++++++++--------------
2 files changed, 50 insertions(+), 33 deletions(-)
Index: src/gdb/cli/cli-script.c
===================================================================
--- src.orig/gdb/cli/cli-script.c 2010-03-28 18:55:20.000000000 +0100
+++ src/gdb/cli/cli-script.c 2010-03-28 18:56:21.000000000 +0100
@@ -932,7 +932,8 @@ process_next_line (char *p, struct comma
/* Check for while, if, break, continue, etc and build a new command
line structure for them. */
if ((p_end - p >= 14 && !strncmp (p, "while-stepping", 14))
- || (p_end -p >= 2 && !strncmp (p, "ws", 2)))
+ || (p_end - p >= 8 && !strncmp (p, "stepping", 8))
+ || (p_end - p >= 2 && !strncmp (p, "ws", 2)))
{
/* Because validate_actionline and encode_action lookup
command's line as command, we need the line to
Index: src/gdb/testsuite/gdb.trace/while-dyn.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.trace/while-dyn.exp 2010-03-28 18:55:20.000000000 +0100
+++ src/gdb/testsuite/gdb.trace/while-dyn.exp 2010-03-28 18:55:43.000000000 +0100
@@ -29,7 +29,8 @@ gdb_start
set testfile "actions"
set srcfile $testfile.c
-set binfile $objdir/$subdir/while-dyn
+set executable while-dyn
+set binfile $objdir/$subdir/$executable
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
executable {debug nowarnings}] != "" } {
untested while-dyn.exp
@@ -46,23 +47,12 @@ gdb_reinitialize_dir $srcdir/$subdir
if { ![gdb_target_supports_trace] } then {
pass "Current target does not support trace"
return 1;
-
}
-# If testing on a remote host, download the source file.
-# remote_download host $srcdir/$subdir/$srcfile
-
#
# test while-stepping dynamically (live target)
#
-## verify number of trace frames collected matches stepcount
-
-gdb_delete_tracepoints
-gdb_test "trace gdb_c_test" \
- "Tracepoint $decimal at .*" \
- "Set tracepoint at gdb_c_test"
-
if [istarget "x86_64-*"] then {
set fpreg "\$rbp"
} elseif [istarget "i?86-*"] then {
@@ -71,33 +61,59 @@ if [istarget "x86_64-*"] then {
set fpreg "\$fp"
}
-gdb_trace_setactions "5.12: define while-stepping <stepcount>" \
+proc test_while_stepping { while_stepping } {
+ global fpreg
+ global decimal
+ global gdb_prompt
+ global executable
+
+ clean_restart $executable
+
+ gdb_test "tstop" "" ""
+ gdb_test "tfind none" "" ""
+ runto_main
+
+ ## verify number of trace frames collected matches stepcount
+
+ gdb_delete_tracepoints
+ gdb_test "trace gdb_c_test" \
+ "Tracepoint $decimal at .*" \
+ "$while_stepping: Set tracepoint at gdb_c_test"
+
+ gdb_trace_setactions "5.12: define $while_stepping <stepcount>" \
"" \
"collect $fpreg" "^$" \
- "while-stepping 5" "^$" \
+ "$while_stepping 5" "^$" \
"collect p" "^$" \
"end" "^$" \
"end" ""
-gdb_test "tstart" "" ""
-
-gdb_test "break end" "" ""
-gdb_test "continue" \
- "Continuing.*Breakpoint $decimal, end.*" \
- "run trace experiment"
-
-gdb_test "tstop" "" ""
-
-gdb_tfind_test "5.12: frame 5 should be the last one collected" "5" "5"
+ gdb_test "tstart" "" ""
-send_gdb "tfind 6\n"
-gdb_expect {
- -re "failed to find.*$gdb_prompt $" {
- pass "5.12: trace stopped after 5 stepping frames"
- }
- -re ".*$gdb_prompt $" {
- fail "5.12: trace stopped after 5 stepping frames"
+ gdb_test "break end" "" ""
+ gdb_test "continue" \
+ "Continuing.*Breakpoint $decimal, end.*" \
+ "$while_stepping: run trace experiment"
+
+ gdb_test "tstop" "" ""
+
+ gdb_tfind_test "$while_stepping: frame 5 should be the last one collected" "5" "5"
+
+ set test "$while_stepping: trace stopped after 5 stepping frames"
+ gdb_test_multiple "tfind 6" "$test" {
+ -re "failed to find.*$gdb_prompt $" {
+ pass "$test"
+ }
+ -re ".*$gdb_prompt $" {
+ fail "$test"
+ }
}
+
+ gdb_test "tfind none" "" ""
}
-gdb_test "tfind none" "" ""
+# Test all while-stepping aliases.
+
+test_while_stepping "while-stepping"
+test_while_stepping "stepping"
+test_while_stepping "ws"