This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] New test for set backtrace related functionality


one week ping.

On Thursday 14 October 2004 15:44, Paul Gilliam wrote:
> This has been tested on powerpc64-unknown-linux-gnu (in 32-bit mode) and on
> i686-pc-linux-gnu
> (repost to remove some left over template lines at end)
>
> OK to commit?
>
> -=# Paul Gilliam #=-
>
> 2004-10-14  Paul Gilliam  <pgilliam@us.ibm.com>
>
>         * gdb.base/setbacktrace.c gdb.base/setbacktrace.exp: New files.
>
> *** /dev/null	2004-04-15 13:01:52.000000000 -0700
> --- gdb.base/setbacktrace.c	2004-10-14 14:08:52.000000000 -0700
> ***************
> *** 0 ****
> --- 1,40 ----
> + /* This testcase is part of GDB, the GNU debugger.
> +
> +    Copyright 2004 Free Software Foundation, Inc.
> +
> +    This program is free software; you can redistribute it and/or modify
> +    it under the terms of the GNU General Public License as published by
> +    the Free Software Foundation; either version 2 of the License, or
> +    (at your option) any later version.
> +
> +    This program is distributed in the hope that it will be useful,
> +    but WITHOUT ANY WARRANTY; without even the implied warranty of
> +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +    GNU General Public License for more details.
> +
> +    You should have received a copy of the GNU General Public License
> +    along with this program; if not, write to the Free Software
> +    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
> +    02111-1307, USA.  */
> +
> + int
> + factorial (int n)
> + {
> +   if (n > 0) {                       /* marker: factorial */
> +     return factorial (n - 1) * n;    /* marker: factorial recursion */
> +   } else {
> +     return 1;
> +   }
> + }
> +
> + int
> + main (int argc, char *argv[])
> + {
> +   int depth = 3;
> +
> +   if (argc > 1) {
> +     depth = atoi(argv[1]);
> +   }
> +
> +   return factorial (depth);           /* marker: main call */
> + }
> *** /dev/null	2004-04-15 13:01:52.000000000 -0700
> --- gdb.base/setbacktrace.exp	2004-10-14 15:43:15.093157912 -0700
> ***************
> *** 0 ****
> --- 1,139 ----
> + # This file is part of the gdb testsuite.
> +
> + # Copyright 2004 Free Software Foundation, Inc.
> +
> + # This program is free software; you can redistribute it and/or modify
> + # it under the terms of the GNU General Public License as published by
> + # the Free Software Foundation; either version 2 of the License, or
> + # (at your option) any later version.
> + #
> + # This program is distributed in the hope that it will be useful,
> + # but WITHOUT ANY WARRANTY; without even the implied warranty of
> + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + # GNU General Public License for more details.
> + #
> + # You should have received a copy of the GNU General Public License
> + # along with this program; if not, write to the Free Software
> + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> USA. +
> + # Check backtrace releated features not tested elsewhere in the testsuit:
> + #   *  Check that we know what backtrace options are available.
> + #   *  Check that GDB will only backtrace the requested number of frames.
> + #   *  Check that GDB doesn't backtrace past main unless asked to do so.
> +
> + if $tracelevel {
> +     strace $tracelevel
> + }
> +
> + set prms_id 0
> + set bug_id 0
> +
> + set testfile setbacktrace
> + set srcfile ${testfile}.c
> + set escapedsrcfile [string_to_regexp "${srcdir}/${subdir}/${srcfile}"]
> + set binfile ${objdir}/${subdir}/${testfile}
> + if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}"
> executable {debug}] != "" } {
> +     untested "Couldn't compile ${testfile}.c"
> +     return -1
> + }
> +
> + set fact_subr_line_nbr  [gdb_get_line_number "marker: factorial"]
> + set fact_recur_line_nbr [gdb_get_line_number "marker: factorial
> recursion"] + set main_subr_line_nbr  [gdb_get_line_number "marker: main
> call"] +
> + # Set how deep should we go and build the expected_frames pattern list.
> + set leadin ".*\[\r\n\]"
> + set subr_depth 20
> + set expected_frames [list "$leadin#0  factorial \\(n=0\\) at
> $escapedsrcfile:$fact_subr_line_nbr"]
> + for {set ndx 1} {$ndx <= $subr_depth} {incr ndx} {
> +   lappend expected_frames [format "$leadin#%-2d $hex in factorial
> \\(n=$ndx\\) at $escapedsrcfile:$fact_recur_line_nbr" $ndx]
> + }
> + lappend expected_frames [format "$leadin#%-2d $hex in main \\(argc=2,
> argv=$hex\\) at $escapedsrcfile:$main_subr_line_nbr" [expr $subr_depth +
> 1]] + #for {set ndx 0} {$ndx < [expr $subr_depth + 2]} {incr ndx} {
> + #  puts "$ndx:  [lindex $expected_frames $ndx]"
> + #}
> +
> +
> + # get things started
> + gdb_exit
> + gdb_start
> + gdb_reinitialize_dir $srcdir/$subdir
> + gdb_load ${binfile}
> + gdb_test "set args $subr_depth"
> +
> +
> + # Advance to main
> + if { ![runto_main] } then {
> +     gdb_suppress_tests;
> + }
> +
> +
> + # Check that someone has not snuck in an extra backtrace option, if
> + # they do they will need to fix this and any such fix should also be
> + # accompanied by a corresponding SET test.
> + set test "set backtrace"
> + send_gdb "set backtrace\n"
> + set foobar [list \
> + 	 ".*\[\n\r\]+List of set backtrace subcommands:" \
> + 	 ".*\[\n\r\]+set backtrace limit -- Set an upper bound on the number of
> backtrace levels" \
> + 	 ".*\[\n\r\]+set backtrace past-main -- Set whether backtraces should
> continue past \"main\"" \
> + 	 ".*\[\n\r\]+Type \"help set backtrace\" followed by set backtrace
> subcommand name for full documentation." \
> + 	 ".*\[\n\r\]+Command name abbreviations are allowed if unambiguous."]
> + gdb_expect_list $test ".*$gdb_prompt $" $foobar
> +
> + # Create a simple stack.
> + gdb_test "break factorial if n == 0"
> + gdb_continue_to_breakpoint "factorial"
> +
> + # Check a backtrace to main (ignore any extra).
> + set test "full backtrace"
> + send_gdb "backtrace\n"
> + gdb_expect_list $test ".*$gdb_prompt $" $expected_frames
> +
> +
> + # Check a backtrace to main (don't ignore any extra).
> + #setup_kfail *-*-* gdb/1760
> + set test "full backtrace (exact)"
> + send_gdb "backtrace\n"
> + gdb_expect_list $test "\[\n\r\]+$gdb_prompt $" $expected_frames
> +
> +
> + # Check a backtrace short of main.
> + set test "partial backtrace"
> + set partial_depth [expr int($subr_depth / 2)]
> + set partial_frames [lrange $expected_frames 0 [expr $partial_depth - 1]]
> + lappend partial_frames "\[\n\r\]\\(More stack frames follow\\.\\.\\.\\)"
> + #for {set ndx 0} {$ndx < [expr $partial_depth + 2]} {incr ndx} {
> + #  puts "$ndx:  [lindex $partial_frames $ndx]"
> + #}
> + send_gdb "backtrace $partial_depth\n"
> + gdb_expect_list $test "\[\n\r\]+$gdb_prompt $" $partial_frames
> +
> +
> + ## Check a backtrace short of main due to limit.
> + set test "partial backtrace (using limit)"
> + set partial_frames [lrange $expected_frames 0 [expr $partial_depth - 1]]
> + lappend partial_frames "^\[\n\r]+Backtrace limit of $partial_depth
> exceeded" + #for {set ndx 0} {$ndx < [llength $partial_frames]} {incr ndx}
> { + #  puts "$ndx:  [lindex $partial_frames $ndx]"
> + #}
> + gdb_test "set backtrace limit $partial_depth" ".*" "Set the backtrace
> limit to $partial_depth"
> + setup_kfail *-*-* gdb/1760
> + send_gdb "backtrace\n"
> + gdb_expect_list $test "\[\r\n]+$gdb_prompt $" $partial_frames
> +
> +
> + # Check a backtrace past main, specify a backtrace limit so it does not
> fall off the end of the stack.
> + set test "backtrace past main"
> + set bt_limit [expr $subr_depth + 3]
> + gdb_test "set backtrace past-main" ".*" "Set the backtrace past-main"
> + gdb_test "set backtrace limit 0" ".*" "Set the backtrace limit to
> unlimited" + set extra_frames [lrange $expected_frames 0 [expr $subr_depth
> + 2]] + lappend extra_frames [format "$leadin#%-2d $hex in \[^ \]+
> \\(\[^\\)]*\\) \[^\r\n]*" [expr $subr_depth + 2]]
> + lappend extra_frames "\\(More stack frames follow\\.\\.\\.\\)"
> + #for {set ndx 0} {$ndx < [llength $extra_frames]} {incr ndx} {
> + #  puts "$ndx:  [lindex $extra_frames $ndx]"
> + #}
> + send_gdb "backtrace $bt_limit\n"
> + gdb_expect_list $test ".*\[\r\n]+$gdb_prompt $" $extra_frames
> +


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]