aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2023-01-19 21:15:56 +0000
committerMaciej W. Rozycki <macro@embecosm.com>2023-01-19 21:15:56 +0000
commit77519ab324b0a417411ce0fd172aee0fa8349643 (patch)
tree121383c4ca5737cccead495dd1ad4dd1282e0030 /gdb/testsuite/gdb.base
parent76b58849c5fc433f71ad7ec18f9f47f782643bc6 (diff)
downloadgdb-77519ab324b0a417411ce0fd172aee0fa8349643.zip
gdb-77519ab324b0a417411ce0fd172aee0fa8349643.tar.gz
gdb-77519ab324b0a417411ce0fd172aee0fa8349643.tar.bz2
GDB/testsuite: Expand for character string limiting options
Modify test cases that verify the operation of the array element limit with character strings such that they are executed twice, once with the `set print characters' option set to `elements' and the limit controlled with the `set print elements' option, and then again with the limit controlled with the `set print characters' option instead. Similarly with the `-elements' and `-characters' options for the `print' command. Additionally verify that said `print' command options combined yield the expected result. Verify correct $_gdb_setting and $_gdb_setting_str values for the `print characters' setting, in particular the `void' value for the `elements' default, which has no corresponding integer value exposed. Add Guile and Python coverage for the `print characters' GDB setting. There are new tests for Ada and Pascal, as the string printing code for these languages is different than the generic string printing code used by other languages. Modula2 also has different string printing code, but (a) this is similar to Pascal, and (b) there are no existing modula2 tests written in Modula2, so I'm not sure how I'd even test the Modula2 string printing. Co-Authored-By: Maciej W. Rozycki <macro@embecosm.com> Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r--gdb/testsuite/gdb.base/printcmds.exp68
-rw-r--r--gdb/testsuite/gdb.base/setshow.exp22
2 files changed, 70 insertions, 20 deletions
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index b29598f..c1adc78 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -449,13 +449,14 @@ proc test_print_all_chars {} {
}
# Test interaction of the number of print elements to print and the
-# repeat count, set to the default of 10.
+# repeat count, set to the default of 10. SETTING is the print
+# setting to verify, either "elements" or "characters".
-proc test_print_repeats_10 {} {
+proc test_print_repeats_10_one { setting } {
global gdb_prompt decimal
for { set x 1 } { $x <= 16 } { incr x } {
- gdb_test_no_output "set print elements $x" "elements $x repeats"
+ gdb_test_no_output "set print $setting $x" "$setting $x repeats"
for { set e 1 } { $e <= 16 } {incr e } {
set v [expr $e - 1]
set command "p &ctable2\[${v}*16\]"
@@ -495,11 +496,18 @@ proc test_print_repeats_10 {} {
set xstr "${xstr}\[.\]\[.\]\[.\]"
}
set string " = \[(\]unsigned char \[*\]\[)\] <ctable2(\\+$decimal)?> ${a}${xstr}"
- gdb_test "$command" "$string" "$command with print elements set to $x"
+ gdb_test "$command" "$string" "$command with print $setting set to $x"
}
}
}
+proc test_print_repeats_10 {} {
+ foreach_with_prefix setting { "elements" "characters" } {
+ test_print_repeats_10_one $setting
+ }
+ gdb_test_no_output "set print characters elements"
+}
+
# This tests whether GDB uses the correct element content offsets
# (relative to the complete `some_struct' value) when counting value
# repetitions.
@@ -512,7 +520,7 @@ proc test_print_repeats_embedded_array {} {
"correct element repeats in array embedded at offset > 0"
}
-proc test_print_strings {} {
+proc test_print_strings_one { setting } {
global gdb_prompt decimal
# We accept "(unsigned char *) " before the string. char vs. unsigned char
@@ -520,35 +528,35 @@ proc test_print_strings {} {
# Test that setting print elements unlimited doesn't completely suppress
# printing; this was a bug in older gdb's.
- gdb_test_no_output "set print elements 0"
+ gdb_test_no_output "set print $setting 0"
gdb_test "p teststring" \
- " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 0"
- gdb_test_no_output "set print elements 1"
+ " = (.unsigned char .. )?\"teststring contents\"" "p teststring with $setting set to 0"
+ gdb_test_no_output "set print $setting 1"
gdb_test "p teststring" \
- " = (.unsigned char .. )?\"t\"\\.\\.\\." "p teststring with elements set to 1"
- gdb_test_no_output "set print elements 5"
+ " = (.unsigned char .. )?\"t\"\\.\\.\\." "p teststring with $setting set to 1"
+ gdb_test_no_output "set print $setting 5"
gdb_test "p teststring" \
- " = (.unsigned char .. )?\"tests\"\\.\\.\\." "p teststring with elements set to 5"
- gdb_test_no_output "set print elements 19"
+ " = (.unsigned char .. )?\"tests\"\\.\\.\\." "p teststring with $setting set to 5"
+ gdb_test_no_output "set print $setting 19"
gdb_test "p teststring" \
- " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 19"
- gdb_test_no_output "set print elements 20"
+ " = (.unsigned char .. )?\"teststring contents\"" "p teststring with $setting set to 19"
+ gdb_test_no_output "set print $setting 20"
gdb_test "p teststring" \
- " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 20"
+ " = (.unsigned char .. )?\"teststring contents\"" "p teststring with $setting set to 20"
- gdb_test "p -elements 1 -- teststring" \
+ gdb_test "p -$setting 1 -- teststring" \
" = (.unsigned char .. )?\"t\"\\.\\.\\."
- gdb_test "p -elements 5 -- teststring" \
+ gdb_test "p -$setting 5 -- teststring" \
" = (.unsigned char .. )?\"tests\"\\.\\.\\."
- gdb_test "p -elements 19 -- teststring" \
+ gdb_test "p -$setting 19 -- teststring" \
" = (.unsigned char .. )?\"teststring contents\""
- gdb_test "p -elements 20 -- teststring" \
+ gdb_test "p -$setting 20 -- teststring" \
" = (.unsigned char .. )?\"teststring contents\""
gdb_test "print teststring2" \
" = \\(charptr\\) \"more contents\""
- gdb_test_no_output "set print elements 8"
+ gdb_test_no_output "set print $setting 8"
# Set the target-charset to ASCII, because the output varies from
# different charset.
@@ -620,6 +628,26 @@ proc test_print_strings {} {
gdb_test "p &ctable1\[31*8\]" \
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\370\\\\371\\\\372\\\\373\\\\374\\\\375\\\\376\\\\377\"..."
}
+
+ gdb_test_no_output "set print $setting unlimited"
+}
+
+proc test_print_strings {} {
+
+ foreach_with_prefix setting { "elements" "characters" } {
+ test_print_strings_one $setting
+ }
+
+ gdb_test "p -elements 8 -- teststring" \
+ " = (.unsigned char .. )?\"teststring contents\""
+ gdb_test "p -characters 8 -- teststring" \
+ " = (.unsigned char .. )?\"teststri\"\\.\\.\\."
+ gdb_test "p -elements 8 -characters elements -- teststring" \
+ " = (.unsigned char .. )?\"teststri\"\\.\\.\\."
+
+ with_test_prefix strings {
+ gdb_test_no_output "set print characters elements"
+ }
}
proc test_print_int_arrays {} {
diff --git a/gdb/testsuite/gdb.base/setshow.exp b/gdb/testsuite/gdb.base/setshow.exp
index 2f3270a..86821ca 100644
--- a/gdb/testsuite/gdb.base/setshow.exp
+++ b/gdb/testsuite/gdb.base/setshow.exp
@@ -374,6 +374,27 @@ proc_with_prefix test_setshow_listsize {} {
gdb_test "show listsize" "Number of source lines gdb will list by default is 100..*" "show listsize (100)"
}
+proc_with_prefix test_setshow_print_characters {} {
+ clean_restart
+
+ gdb_test "p \$_gdb_setting(\"print characters\")" " = void" \
+ "_gdb_setting print characters default"
+ gdb_test "p \$_gdb_setting_str(\"print characters\")" " = \"elements\"" \
+ "_gdb_setting_str print characters default"
+
+ gdb_test_no_output "set print characters unlimited"
+ gdb_test "p \$_gdb_setting(\"print characters\")" " = 0" \
+ "_gdb_setting print characters unlimited"
+ gdb_test "p \$_gdb_setting_str(\"print characters\")" " = \"unlimited\"" \
+ "_gdb_setting_str print characters unlimited"
+
+ gdb_test_no_output "set print characters 1"
+ gdb_test "p \$_gdb_setting(\"print characters\")" " = 1" \
+ "_gdb_setting print characters 1"
+ gdb_test "p \$_gdb_setting_str(\"print characters\")" " = \"1\"" \
+ "_gdb_setting_str print characters 1"
+}
+
proc_with_prefix test_setshow_prompt {} {
clean_restart
@@ -493,6 +514,7 @@ test_setshow_height
test_setshow_history
test_setshow_language
test_setshow_listsize
+test_setshow_print_characters
test_setshow_prompt
test_setshow_radix
test_setshow_width