From 8625200f9fb649674ac2c18d6a1ba4779b5b17c5 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Thu, 10 Aug 2006 16:06:25 +0000 Subject: [PATCH] 2006-08-10 Andrew Stubbs gdb/ * cli/cli-script.c (execute_user_command): Update command_next_depth on user-command call. gdb/testsuite * gdb.base/trace-commands.exp: New file. --- gdb/ChangeLog | 5 + gdb/cli/cli-script.c | 2 + gdb/testsuite/ChangeLog | 4 + gdb/testsuite/gdb.base/trace-commands.exp | 129 ++++++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 gdb/testsuite/gdb.base/trace-commands.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 62e02038f76..5a34e5e57d9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2006-08-10 Andrew Stubbs + + * cli/cli-script.c (execute_user_command): Update command_next_depth + on user-command call. + 2006-08-09 Joel Brobecker * NEWS: Add entry for new substitute-path commands. diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index 1b5d342b3ad..ec11eef31b5 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -286,6 +286,7 @@ execute_user_command (struct cmd_list_element *c, char *args) not confused with Insight. */ in_user_command = 1; + command_nest_depth++; while (cmdlines) { ret = execute_control_command (cmdlines); @@ -296,6 +297,7 @@ execute_user_command (struct cmd_list_element *c, char *args) } cmdlines = cmdlines->next; } + command_nest_depth--; do_cleanups (old_chain); } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0c4de89b130..4b50802de35 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2006-08-10 Andrew Stubbs + + * gdb.base/trace-commands.exp: New file. + 2006-08-10 Joel Brobecker Daniel Jacobowitz diff --git a/gdb/testsuite/gdb.base/trace-commands.exp b/gdb/testsuite/gdb.base/trace-commands.exp new file mode 100644 index 00000000000..78f35ad9e3c --- /dev/null +++ b/gdb/testsuite/gdb.base/trace-commands.exp @@ -0,0 +1,129 @@ +# Copyright 2006 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. + +# Test that the source command's verbose mode works, the 'set trace-commands' +# command works, and that the nest depth is correct in various circumstances. + +if $tracelevel then { + strace $tracelevel +} + +gdb_exit +gdb_start + +# Create a file to source +set fd [open "tracecommandsscript" w] +puts $fd "\ +echo in tracecommandsscript\\n +define func + echo in func \$arg0\\n +end +if 1 + if 2 + if 3 + if 4 + echo deep\\n + func 999 + end + end + end +end +" +close $fd + +# Make sure that the show trace-commands exists and the default is 'off'. +gdb_test "show trace-commands" "State of GDB CLI command tracing is off\\." \ + "show trace-commands says off" + +# Source the script with verbose mode. +send_gdb "source -v tracecommandsscript\n" +gdb_expect_list "source -v" ".*$gdb_prompt $" { + {[\r\n]\+echo in tracecommandsscript\\n} + {[\r\n]\+define func} + {[\r\n]\+if 1} + {[\r\n]\+\+if 2} + {[\r\n]\+\+\+if 3} + {[\r\n]\+\+\+\+if 4} + {[\r\n]\+\+\+\+\+echo deep\\n} + {[\r\n]\+\+\+\+\+func 999} + {[\r\n]\+\+\+\+\+\+echo in func 999\\n} +} + +# Turn on command tracing. +gdb_test "set trace-commands" "" "set trace-commands" + +# Make sure show trace-commands now gives 'on'. +gdb_test "show trace-commands" \ + {\+show trace-commands[\r\n]+State of GDB CLI command tracing is on\.} \ + "show trace-commands says on" + +# Simple test +gdb_test "echo hi\\n" {\+echo hi\\n[\r\n]+hi} "simple trace-commands test" + +# Nested test +send_gdb "if 1\nset \$i = 0\nwhile \$i < 5\nfunc \$i\nset \$i += 1\nend\nend\n" +gdb_expect_list "nested trace-commands test" ".*$gdb_prompt $" { + {[\r\n]\+if 1} + {[\r\n]\+\+set \$i = 0} + {[\r\n]\+\+while \$i < 5} + {[\r\n]\+\+\+func \$i} + {[\r\n]\+\+\+\+echo in func \$i\\n} + {[\r\n]\+\+\+set \$i \+= 1} + {[\r\n]\+\+\+func \$i} + {[\r\n]\+\+\+\+echo in func \$i\\n} + {[\r\n]\+\+\+set \$i \+= 1} + {[\r\n]\+\+\+func \$i} + {[\r\n]\+\+\+\+echo in func \$i\\n} + {[\r\n]\+\+\+set \$i \+= 1} + {[\r\n]\+\+\+func \$i} + {[\r\n]\+\+\+\+echo in func \$i\\n} + {[\r\n]\+\+\+set \$i \+= 1} + {[\r\n]\+\+\+func \$i} + {[\r\n]\+\+\+\+echo in func \$i\\n} + {[\r\n]\+\+\+set \$i \+= 1} +} + +# Function with source works +send_gdb "define topfunc\nsource tracecommandsscript\nend\n" +gdb_expect_list "define user command" ".*$gdb_prompt $" { + {[\r\n]\+define topfunc} +} +send_gdb "topfunc\n" +gdb_expect_list "nested trace-commands test with source" ".*$gdb_prompt $" { + {[\r\n]\+topfunc} + {[\r\n]\+\+source tracecommandsscript} + {[\r\n]\+\+echo in tracecommandsscript\\n} + {[\r\n]\+\+define func} + {[\r\n]\+\+if 1} + {[\r\n]\+\+\+if 2} + {[\r\n]\+\+\+\+if 3} + {[\r\n]\+\+\+\+\+if 4} + {[\r\n]\+\+\+\+\+\+echo deep\\n} + {[\r\n]\+\+\+\+\+\+func 999} + {[\r\n]\+\+\+\+\+\+\+echo in func 999\\n} +} + +# Test nest depth resets properly on error +send_gdb "if 1\nif 2\nload\necho should not get here\\n\nend\nend\n" +gdb_expect_list "depth resets on error part 1" ".*$gdb_prompt $" { + {[\r\n]\+if 1} + {[\r\n]\+\+if 2} + {[\r\n]\+\+\+load} + {[\r\n]No executable file specified\.} + {[\r\n]Use the "file" or "exec-file" command\.} +} +gdb_test "echo hi\\n" {[\r\n]\+echo hi\\n[\r\n]+hi} \ + "depth resets on error part 2" -- 2.30.2