| # Copyright 1992-2021 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 3 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, see <http://www.gnu.org/licenses/>. |
| |
| # This file was written by Michael Snyder (msnyder@cygnus.com) |
| |
| # Test gdb set and show commands. The goal here is to verify that parameters |
| # are set and shown correctly, not test whether setting the parameter has the |
| # desired effect. |
| |
| |
| standard_testfile .c |
| |
| if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } { |
| untested "failed to compile" |
| return -1 |
| } |
| |
| proc_with_prefix test_setshow_annotate {} { |
| # Start with a fresh gdb |
| clean_restart $::binfile |
| |
| if ![runto_main] then { |
| return |
| } |
| |
| #test default annotation_level is 0 |
| gdb_test "show annotate" "Annotation_level is 0..*" "default annotation_level is zero" |
| |
| #test set annotate 2 |
| |
| # Here we need to fiddle with prompts. |
| save_vars { ::gdb_prompt } { |
| set old_gdb_prompt $::gdb_prompt |
| set ::gdb_prompt "\r\n\032\032pre-prompt\r\n$::gdb_prompt \r\n\032\032prompt\r\n" |
| |
| gdb_test_multiple "set annotate 2" "set annotate 2" { |
| -re "\r\n$::gdb_prompt$" { |
| pass "set annotate 2" |
| } |
| } |
| |
| gdb_test_multiple "show annotate" "show annotate 2" { |
| -re ".*\032\032post-prompt.*Annotation_level is 2..*\032\032pre-prompt.*$old_gdb_prompt .*\032\032prompt.*$" { |
| pass "show annotate 2" |
| } |
| } |
| |
| #test annotation_level 2 |
| gdb_test_multiple "info line 1" "annotation_level 2" { |
| -re ".*\032\032post-prompt.*Line 1 of .* is at address .* but contains no code.*:1:0:beg:0x.*\032\032pre-prompt.*$old_gdb_prompt .*\032\032prompt.*$" { |
| pass "annotation_level 2" |
| } |
| } |
| } |
| |
| #test set annotate 1 |
| gdb_test "set annotate 1" ".*post-prompt.*" |
| gdb_test "show annotate" "Annotation_level is 1..*" "show annotate (1)" |
| #test annotation_level 1 |
| gdb_test "info line 1" "Line 1 of .* is at address .* but contains no code.*:1:0:beg:0x.*" "annotation_level 1" |
| #test set annotate 0 |
| gdb_test_no_output "set annotate 0" "set annotate 0" |
| gdb_test "show annotate" "Annotation_level is 0..*" "show annotate (0)" |
| #test annotation_level 0 |
| gdb_test "info line 1" "Line 1 of .* is at address .* but contains no code.*" "annotation_level 0" |
| } |
| |
| proc_with_prefix test_setshow_args {} { |
| clean_restart $::binfile |
| |
| if ![runto_main] then { |
| return |
| } |
| |
| gdb_test "show args" "Argument list to give program being debugged when it is started is \"\"\." \ |
| "show args empty" |
| gdb_test "p \$_gdb_setting_str(\"args\")" " = \"\"" |
| |
| gdb_test_no_output "set args ~" |
| gdb_test "show args" "Argument list to give program being debugged when it is started is \"~\"..*" \ |
| "show args ~" |
| |
| #test set args |
| gdb_test_no_output "set args foo bar blup baz bubble" "set args" |
| |
| #test show args |
| gdb_test "show args" "Argument list to give program being debugged when it is started is \"foo bar blup baz bubble\"..*" \ |
| "show args multiple words" |
| gdb_test "p \$_gdb_setting(\"args\")" " = \"foo bar blup baz bubble\"" \ |
| "_gdb_setting args" |
| |
| # Don't test if we can't pass args or if we're using a stub. |
| if { !$::use_gdb_stub && ![target_info exists noargs] } { |
| #test passing args |
| gdb_test "cont" "Continuing.*" "continuing" |
| delete_breakpoints |
| gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args" |
| } |
| } |
| |
| proc_with_prefix test_setshow_check {} { |
| clean_restart |
| |
| #test set check range on |
| # Note: the below might produce a warning, so match anything. |
| gdb_test "set check range on" "" |
| |
| gdb_test "p \$_gdb_setting(\"check range\")" " = \"on\"" \ |
| "_gdb_setting check range on" |
| |
| #test show check range on |
| gdb_test "show check range" "Range checking is \"on\"\..*" "show check range (on)" |
| |
| #test set check range off with trailing space |
| gdb_test_no_output "set check range off " "set check range off" |
| |
| #test show check range off |
| gdb_test "show check range" "Range checking is \"off\"\..*" "show check range (off)" |
| gdb_test "p \$_gdb_setting(\"check range\")" " = \"off\"" \ |
| "_gdb_setting check range off" |
| |
| #test set check range auto |
| gdb_test_no_output "set check range auto" "set check range auto" |
| |
| #test show check range auto |
| gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)" |
| gdb_test "p \$_gdb_setting(\"check range\")" " = \"auto\"" \ |
| "_gdb_setting check range auto" |
| |
| # Test set check type on |
| gdb_test_no_output "set check type on" |
| |
| # Test show check type on |
| gdb_test "show check type" "Strict type checking is on\..*" \ |
| "show check type (on)" |
| gdb_test "p \$_gdb_setting_str(\"check type\")" " = \"on\"" \ |
| "_gdb_setting_str check type on" |
| gdb_test "p \$_gdb_setting(\"check type\")" " = 1" \ |
| "_gdb_setting check type on 1" |
| |
| # Test set check type off with trailing space |
| gdb_test_no_output "set check type off " "set check type off" |
| gdb_test "p \$_gdb_setting_str(\"check type\")" " = \"off\"" \ |
| "_gdb_setting_str check type off" |
| gdb_test "p \$_gdb_setting(\"check type\")" " = 0" \ |
| "_gdb_setting check type off 0" |
| |
| # Test show check type off |
| gdb_test "show check type" "Strict type checking is off\..*" \ |
| "show check type (off)" |
| } |
| |
| proc_with_prefix test_setshow_breakpoint_pending {} { |
| #test set breakpoint pending |
| |
| #test set breakpoint pending on |
| gdb_test_no_output "set breakpoint pending on" |
| gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" " = \"on\"" \ |
| "_gdb_setting_str breakpoint pending on" |
| gdb_test "p \$_gdb_setting(\"breakpoint pending\")" " = 1" \ |
| "_gdb_setting breakpoint pending 1" |
| |
| #test show breakpoint pending on |
| gdb_test "show breakpoint pending" " is on\..*" "show breakpoint pending on" |
| |
| #test show breakpoint pending off |
| gdb_test_no_output "set breakpoint pending off" |
| gdb_test "show breakpoint pending" " is off\..*" "show breakpoint pending off" |
| gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" " = \"off\"" \ |
| "_gdb_setting_str breakpoint pending off" |
| gdb_test "p \$_gdb_setting(\"breakpoint pending\")" " = 0" \ |
| "_gdb_setting breakpoint pending 0" |
| |
| #test set breakpoint pending auto |
| gdb_test_no_output "set breakpoint pending auto" |
| |
| #test show breakpoint pending auto |
| gdb_test "show breakpoint pending" " is auto.*" "show breakpoint pending auto" |
| gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" " = \"auto\"" \ |
| "_gdb_setting_str breakpoint pending auto" |
| gdb_test "p \$_gdb_setting(\"breakpoint pending\")" " = -1" \ |
| "_gdb_setting breakpoint pending -1" |
| } |
| |
| proc_with_prefix test_setshow_complaints {} { |
| clean_restart |
| |
| #test set complaints 100 |
| gdb_test_no_output "set complaints 100" "set complaints 100" |
| #test show complaints 100 |
| gdb_test "show complaints" "Max number of complaints about incorrect symbols is 100..*" "show complaints (100)" |
| #test set complaints 0 |
| gdb_test_no_output "set complaints 0" "set complaints 0" |
| #test show complaints 0 |
| gdb_test "show complaints" "Max number of complaints about incorrect symbols is 0..*" "show complaints (0)" |
| } |
| |
| proc_with_prefix test_setshow_confirm {} { |
| clean_restart |
| |
| #test set confirm off |
| gdb_test_no_output "set confirm off" "set confirm off" |
| #test show confirm off |
| gdb_test "show confirm" "Whether to confirm potentially dangerous operations is off..*" "show confirm (off)" |
| #test set confirm on |
| gdb_test_no_output "set confirm on" "set confirm on" |
| #test show confirm on |
| gdb_test "show confirm" "Whether to confirm potentially dangerous operations is on..*" "show confirm (on)" |
| } |
| |
| proc_with_prefix test_setshow_editing {} { |
| clean_restart |
| |
| #test set editing off |
| gdb_test_no_output "set editing off" "set editing off" |
| |
| #test show editing off |
| gdb_test "show editing" "Editing of command lines as they are typed is off..*" "show editing (off)" |
| |
| #test set editing on |
| #gdb_test_no_output "set editing on" "set editing on" |
| |
| #test show editing on |
| #gdb_test "show editing" "Editing of command lines as they are typed is on..*" "show editing (on)" |
| } |
| |
| proc_with_prefix test_setshow_environment {} { |
| clean_restart |
| |
| #test set environment FOOBARBAZ |
| gdb_test_no_output "set environment FOOBARBAZ = grbxgrbxgrbx" \ |
| "set environment FOOBARBAZ" |
| |
| #test show environment FOOBARBAZ |
| gdb_test "show environment FOOBARBAZ" "FOOBARBAZ = grbxgrbxgrbx.*" |
| } |
| |
| proc_with_prefix test_setshow_height {} { |
| clean_restart |
| |
| #test set height 100 |
| gdb_test_no_output "set height 100" "set height 100" |
| |
| #test show height 100 |
| gdb_test "show height" "Number of lines gdb thinks are in a page is 100..*" |
| gdb_test "p \$_gdb_setting_str(\"height\")" " = \"100\"" \ |
| "_gdb_setting_str height 100" |
| gdb_test "p \$_gdb_setting(\"height\")" " = 100" \ |
| "_gdb_setting height 100" |
| |
| # Back to infinite height to avoid pagers. While at it, check that |
| # literal "unlimited" works just as well as 0. |
| gdb_test_no_output "set height unlimited" |
| gdb_test "p \$_gdb_setting_str(\"height\")" " = \"unlimited\"" \ |
| "_gdb_setting_str height unlimited" |
| gdb_test "p \$_gdb_setting(\"height\")" " = 0" \ |
| "_gdb_setting height unlimited" |
| } |
| |
| proc_with_prefix test_setshow_history {} { |
| clean_restart |
| |
| #test set history expansion on |
| gdb_test_no_output "set history expansion on" "set history expansion on" |
| |
| #test show history expansion on |
| gdb_test "show history expansion on" "History expansion on command input is on.*" "show history expansion" |
| |
| #get home directory path |
| set HOME "" |
| set test "show environment HOME" |
| gdb_test_multiple $test $test { |
| -re "\nHOME = (\[^\r\n\]*)\[\r\n\]+$::gdb_prompt $" { |
| set HOME $expect_out(1,string) |
| pass $test |
| } |
| } |
| |
| #test set history filename ~/foobar.baz |
| gdb_test_no_output "set history filename ~/foobar.baz" \ |
| "set history filename ~/foobar.baz" |
| |
| #test show history filename ~/foobar.baz |
| gdb_test "show history filename" \ |
| "The filename in which to record the command history is \"[string_to_regexp $HOME]/foobar.baz\"..*" \ |
| "show history filename (~/foobar.baz)" |
| gdb_test "p \$_gdb_setting(\"history filename\")" \ |
| " = \"[string_to_regexp $HOME]/foobar.baz\"..*" \ |
| "_gdb_setting history filename" |
| gdb_test "p \$_gdb_setting_str(\"history filename\")" \ |
| " = \"[string_to_regexp $HOME]/foobar.baz\"..*" \ |
| "_gdb_setting_str history filename" |
| |
| #get current working directory |
| set PWD "" |
| set test "show working directory" |
| gdb_test_multiple "pwd" $test { |
| -re "\nWorking directory (\[^\r\n\]*)\\.\[\r\n\]+$::gdb_prompt $" { |
| set PWD $expect_out(1,string) |
| pass $test |
| } |
| } |
| |
| #test set history filename foobar.baz |
| gdb_test_no_output "set history filename foobar.baz" \ |
| "set history filename foobar.baz" |
| |
| #test show history filename foobar.baz |
| gdb_test "show history filename" \ |
| "The filename in which to record the command history is \"[string_to_regexp $PWD]/foobar.baz\"..*" \ |
| "show history filename (current_directory/foobar.baz)" |
| |
| #test set history save on |
| gdb_test_no_output "set history save on" "set history save on" |
| |
| #test show history save on |
| gdb_test "show history save" "Saving of the history record on exit is on..*" "show history save (on)" |
| |
| #history saving should stay disabled |
| gdb_test_no_output "set history save off" "set history save off" |
| |
| #test set history size 100 |
| gdb_test_no_output "set history size 100" "set history size 100" |
| |
| #test show history size 100 |
| gdb_test "show history size" "The size of the command history is 100..*" "show history size (100)" |
| } |
| |
| proc_with_prefix test_setshow_language {} { |
| clean_restart |
| |
| #test set language asm |
| gdb_test_no_output "set language asm" |
| |
| #test show language asm |
| gdb_test "show language" "The current source language is \"asm\"..*" "show language (asm)" |
| |
| #test set language rust, with a trailing space |
| gdb_test_no_output "set language rust " "set language rust" |
| |
| #test show language rust |
| gdb_test "show language" "The current source language is \"rust\"..*" "show language (rust)" |
| |
| #test completion for set language. |
| gdb_test "complete set language min" "set language minimal" \ |
| "complete set language minimal" |
| |
| #test set language auto |
| gdb_test_no_output "set language auto" "set language auto" |
| |
| #test show language |
| gdb_test "show language" "The current source language is \"auto.*\"..*" "show language (auto)" |
| } |
| |
| proc_with_prefix test_setshow_listsize {} { |
| clean_restart |
| |
| #test set listsize 100 |
| gdb_test_no_output "set listsize 100" "set listsize 100" |
| |
| #test show listsize 100 |
| gdb_test "show listsize" "Number of source lines gdb will list by default is 100..*" "show listsize (100)" |
| } |
| |
| proc_with_prefix test_setshow_prompt {} { |
| clean_restart |
| |
| if [board_info target exists gdb_prompt] { |
| return |
| } |
| |
| #test set prompt (FooBarBaz) |
| set newprompt "\\(FooBarBaz\\)" |
| |
| gdb_test_multiple "set prompt (FooBarBaz) " "set prompt FooBarBaz" { |
| -re "\[\r\n\]$newprompt $" { |
| pass "set prompt FooBarBaz" |
| } |
| } |
| |
| #test show prompt (FooBarBaz) |
| gdb_test_multiple "show prompt" "show prompt FooBarBaz" { |
| -re "Gdb's prompt is \"$newprompt \"..* $" { |
| pass "show prompt FooBarBaz" |
| } |
| } |
| |
| #test set prompt (gdb) |
| gdb_test_multiple "set prompt (gdb) " "set prompt gdb" { |
| -re "\[\r\n\]$::gdb_prompt $" { |
| pass "set prompt gdb" |
| } |
| } |
| } |
| |
| proc_with_prefix test_setshow_radix {} { |
| clean_restart |
| |
| #test set radix 11 |
| gdb_test "set radix 11" "Unsupported output radix ``decimal 11''; output radix unchanged..*" |
| |
| #test set radix 16 |
| gdb_test "set radix 16" "Input and output radices now set to decimal 16, hex 10, octal 20..*" |
| |
| #test show radix 16 |
| gdb_test "show radix" "Input and output radices set to decimal 16, hex 10, octal 20..*" "show radix (16)" |
| |
| #test set radix 10 |
| gdb_test "set radix" "Input and output radices now set to decimal 10, hex a, octal 12..*" "set radix 10" |
| |
| #test show radix 10 |
| gdb_test "show radix" "Input and output radices set to decimal 10, hex a, octal 12..*" "show radix (10)" |
| } |
| |
| proc_with_prefix test_setshow_width {} { |
| clean_restart |
| |
| #test set width 90 |
| gdb_test_no_output "set width 90" "set width 90" |
| |
| #test show width 90 |
| gdb_test "show width" "Number of characters gdb thinks are in a line is 90..*" "show width (90)" |
| } |
| |
| proc_with_prefix test_setshow_write {} { |
| clean_restart |
| |
| #test set write on |
| # This is only supported on targets which use exec.o. |
| gdb_test_no_output "set write on" "set write on" |
| |
| #test show write on |
| # This is only supported on targets which use exec.o. |
| gdb_test "show write" "Writing into executable and core files is on..*" "show write (on)" |
| } |
| |
| proc_with_prefix test_show_user {} { |
| clean_restart |
| |
| #test show user |
| gdb_test_no_output "show user" "show user" |
| } |
| |
| proc_with_prefix test_setshow_verbose {} { |
| clean_restart |
| |
| #test set verbose on |
| gdb_test_no_output "set verbose on" "set verbose on" |
| |
| #test show verbose on |
| gdb_test "show verbose" "Verbose printing of informational messages is on..*" "show verbose (on)" |
| |
| #test set verbose off |
| gdb_test_no_output "set verbose off" "set verbose off" |
| |
| #test show verbose off |
| gdb_test "show verbose" "Verbosity is off..*" "show verbose (off)" |
| } |
| |
| proc_with_prefix test_argument_preceded_by_space {} { |
| clean_restart |
| |
| #test argument must be preceded by space |
| foreach x {"history file" "solib-search-path" "data-directory"} { |
| foreach y {"/home/" "~/home" "=home"} { |
| gdb_test "set $x$y" "Argument must be preceded by space." \ |
| "$x is not set to $y" |
| } |
| } |
| } |
| |
| test_setshow_annotate |
| test_setshow_args |
| test_setshow_check |
| test_setshow_breakpoint_pending |
| test_setshow_complaints |
| test_setshow_confirm |
| test_setshow_editing |
| test_setshow_environment |
| test_setshow_height |
| test_setshow_history |
| test_setshow_language |
| test_setshow_listsize |
| test_setshow_prompt |
| test_setshow_radix |
| test_setshow_width |
| test_setshow_write |
| test_show_user |
| test_setshow_verbose |
| test_argument_preceded_by_space |