| # Copyright 2023-2024 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/>. |
| |
| # Test GDB's limited array printing. |
| |
| standard_testfile |
| |
| if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} { |
| return -1 |
| } |
| |
| if {![runto_main]} { |
| perror "couldn't run to breakpoint" |
| continue |
| } |
| |
| with_test_prefix "with standard max-value size" { |
| gdb_test "print large_1d_array" \ |
| " = \\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\ |
| 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\ |
| 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\ |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\ |
| 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\ |
| 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,\ |
| 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,\ |
| 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,\ |
| 96, 97, 98, 99\\\}" |
| gdb_test -nonl "output large_1d_array" \ |
| "\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\ |
| 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\ |
| 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\ |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\ |
| 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\ |
| 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,\ |
| 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,\ |
| 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,\ |
| 96, 97, 98, 99\\\}" |
| gdb_test "print large_2d_array" \ |
| " = \\\{\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\\},\ |
| \\\{10, 11, 12, 13, 14, 15, 16, 17, 18, 19\\\},\ |
| \\\{20, 21, 22, 23, 24, 25, 26, 27, 28, 29\\\},\ |
| \\\{30, 31, 32, 33, 34, 35, 36, 37, 38, 39\\\},\ |
| \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\},\ |
| \\\{50, 51, 52, 53, 54, 55, 56, 57, 58, 59\\\},\ |
| \\\{60, 61, 62, 63, 64, 65, 66, 67, 68, 69\\\},\ |
| \\\{70, 71, 72, 73, 74, 75, 76, 77, 78, 79\\\},\ |
| \\\{80, 81, 82, 83, 84, 85, 86, 87, 88, 89\\\},\ |
| \\\{90, 91, 92, 93, 94, 95, 96, 97, 98, 99\\\}\\\}" |
| gdb_test -nonl "output large_2d_array" \ |
| "\\\{\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\\},\ |
| \\\{10, 11, 12, 13, 14, 15, 16, 17, 18, 19\\\},\ |
| \\\{20, 21, 22, 23, 24, 25, 26, 27, 28, 29\\\},\ |
| \\\{30, 31, 32, 33, 34, 35, 36, 37, 38, 39\\\},\ |
| \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\},\ |
| \\\{50, 51, 52, 53, 54, 55, 56, 57, 58, 59\\\},\ |
| \\\{60, 61, 62, 63, 64, 65, 66, 67, 68, 69\\\},\ |
| \\\{70, 71, 72, 73, 74, 75, 76, 77, 78, 79\\\},\ |
| \\\{80, 81, 82, 83, 84, 85, 86, 87, 88, 89\\\},\ |
| \\\{90, 91, 92, 93, 94, 95, 96, 97, 98, 99\\\}\\\}" |
| } |
| |
| # Set the max-value-size so we can only print 51 elements. |
| set elements 51 |
| set int_size [get_valueof "/d" "sizeof(large_1d_array\[0\])" "*unknown*"] |
| gdb_test_no_output "set max-value-size [expr $int_size * $elements]" |
| |
| with_test_prefix "with reduced max-value size" { |
| gdb_test "print large_1d_array" \ |
| "\r\nvalue requires $decimal bytes, which is more than max-value-size" |
| gdb_test "output large_1d_array" \ |
| "\r\nvalue requires $decimal bytes, which is more than max-value-size" |
| gdb_test "print large_2d_array" \ |
| "\r\nvalue requires $decimal bytes, which is more than max-value-size" |
| gdb_test "output large_2d_array" \ |
| "\r\nvalue requires $decimal bytes, which is more than max-value-size" |
| } |
| |
| gdb_test_no_output "set print elements 3" |
| |
| with_test_prefix "with reduced print elements" { |
| gdb_test "print large_1d_array" \ |
| " = \\\{0, 1, 2\\.\\.\\.\\\}" |
| gdb_test -nonl "output large_1d_array" \ |
| "\\\{0, 1, 2\\.\\.\\.\\\}" |
| |
| gdb_test "print \$" \ |
| " = \\\{0, 1, 2\\.\\.\\.\\\}" \ |
| "print large_1d_array from history" |
| gdb_test -nonl "output \$\$" \ |
| "\\\{0, 1, 2\\.\\.\\.\\\}" \ |
| "output large_1d_array from history" |
| |
| gdb_test "print large_2d_array" \ |
| " = \\\{\\\{0, 1, 2\\.\\.\\.\\\}, \\\{10, 11, 12\\.\\.\\.\\\},\ |
| \\\{20, 21, 22\\.\\.\\.\\\}\\.\\.\\.\\\}" |
| gdb_test -nonl "output large_2d_array" \ |
| "\\\{\\\{0, 1, 2\\.\\.\\.\\\}, \\\{10, 11, 12\\.\\.\\.\\\},\ |
| \\\{20, 21, 22\\.\\.\\.\\\}\\.\\.\\.\\\}" |
| |
| gdb_test "print \$" \ |
| " = \\\{\\\{0, 1, 2\\.\\.\\.\\\}, \\\{10, 11, 12\\.\\.\\.\\\},\ |
| \\\{20, 21, 22\\.\\.\\.\\\}\\.\\.\\.\\\}" \ |
| "print large_2d_array from history" |
| gdb_test -nonl "output \$\$" \ |
| "\\\{\\\{0, 1, 2\\.\\.\\.\\\}, \\\{10, 11, 12\\.\\.\\.\\\},\ |
| \\\{20, 21, 22\\.\\.\\.\\\}\\.\\.\\.\\\}" \ |
| "output large_2d_array from history" |
| } |
| |
| gdb_test_no_output "set print elements $elements" |
| |
| with_test_prefix "with print elements matching max-value size" { |
| gdb_test "print \$\$2" \ |
| " = \\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\ |
| 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\ |
| 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\ |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\ |
| 48, 49, 50\\.\\.\\.\\\}" \ |
| "print large_1d_array from history" |
| gdb_test -nonl "output \$\$3" \ |
| "\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\ |
| 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\ |
| 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\ |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\ |
| 48, 49, 50\\.\\.\\.\\\}" \ |
| "output large_1d_array from history" |
| |
| gdb_test "print \$\$2" \ |
| " = \\\{\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\\},\ |
| \\\{10, 11, 12, 13, 14, 15, 16, 17, 18, 19\\\},\ |
| \\\{20, 21, 22, 23, 24, 25, 26, 27, 28, 29\\\},\ |
| \\\{30, 31, 32, 33, 34, 35, 36, 37, 38, 39\\\},\ |
| \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\},\ |
| \\\{50(?:, <unavailable>)\{9\}\\\}(?:,\ |
| \\\{<unavailable>(?:, <unavailable>)\{9\}\\\})\{4\}\\\}" \ |
| "print large_2d_array from history" |
| gdb_test -nonl "output \$\$3" \ |
| "\\\{\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\\},\ |
| \\\{10, 11, 12, 13, 14, 15, 16, 17, 18, 19\\\},\ |
| \\\{20, 21, 22, 23, 24, 25, 26, 27, 28, 29\\\},\ |
| \\\{30, 31, 32, 33, 34, 35, 36, 37, 38, 39\\\},\ |
| \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\},\ |
| \\\{50(?:, <unavailable>)\{9\}\\\}(?:,\ |
| \\\{<unavailable>(?:, <unavailable>)\{9\}\\\})\{4\}\\\}" \ |
| "output large_2d_array from history" |
| } |
| |
| gdb_test_no_output "set max-value-size unlimited" |
| gdb_test_no_output "set print elements unlimited" |
| gdb_test_no_output "set print repeats 3" |
| |
| with_test_prefix "with unlimited print elements" { |
| gdb_test "print \$\$" \ |
| " = \\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\ |
| 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\ |
| 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\ |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\ |
| 48, 49, 50, <unavailable> <repeats 49 times>\\\}" \ |
| "print large_1d_array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\ |
| 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\ |
| 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\ |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\ |
| 48, 49, 50, <unavailable> <repeats 49 times>\\\}" \ |
| "output large_1d_array from history" |
| |
| gdb_test "print \$\$" \ |
| " = \\\{\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\\},\ |
| \\\{10, 11, 12, 13, 14, 15, 16, 17, 18, 19\\\},\ |
| \\\{20, 21, 22, 23, 24, 25, 26, 27, 28, 29\\\},\ |
| \\\{30, 31, 32, 33, 34, 35, 36, 37, 38, 39\\\},\ |
| \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\},\ |
| \\\{50, <unavailable> <repeats 9 times>\\\},\ |
| \\\{<unavailable> <repeats 10 times>\\\}\ |
| <repeats 4 times>\\\}" \ |
| "print large_2d_array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\\{\\\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\\\},\ |
| \\\{10, 11, 12, 13, 14, 15, 16, 17, 18, 19\\\},\ |
| \\\{20, 21, 22, 23, 24, 25, 26, 27, 28, 29\\\},\ |
| \\\{30, 31, 32, 33, 34, 35, 36, 37, 38, 39\\\},\ |
| \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\},\ |
| \\\{50, <unavailable> <repeats 9 times>\\\},\ |
| \\\{<unavailable> <repeats 10 times>\\\}\ |
| <repeats 4 times>\\\}" \ |
| "output large_2d_array from history" |
| |
| gdb_test "print \$\[4\]" \ |
| " = \\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\}" \ |
| "print available large_2d_array row from history" |
| gdb_test -nonl "output \$\$\[4\]" \ |
| "\\\{40, 41, 42, 43, 44, 45, 46, 47, 48, 49\\\}" \ |
| "output available large_2d_array row from history" |
| |
| gdb_test "print \$\$\[5\]" \ |
| " = \\\{50, <unavailable> <repeats 9 times>\\\}" \ |
| "print partially available large_2d_array row from history" |
| gdb_test -nonl "output \$\$2\[5\]" \ |
| "\\\{50, <unavailable> <repeats 9 times>\\\}" \ |
| "output partially available large_2d_array row from history" |
| |
| gdb_test "print \$\$2\[6\]" \ |
| " = <unavailable>" \ |
| "print unavailable large_2d_array row from history" |
| gdb_test -nonl "output \$\$3\[6\]" \ |
| "<unavailable>" \ |
| "output unavailable large_2d_array row from history" |
| |
| gdb_test "print \$\$3\[5\]\[0\]" \ |
| " = 50" \ |
| "print available large_2d_array element from history" |
| gdb_test -nonl "output \$\$4\[5\]\[0\]" \ |
| "50" \ |
| "output available large_2d_array element from history" |
| |
| gdb_test "print \$\$4\[5\]\[1\]" \ |
| " = <unavailable>" \ |
| "print unavailable large_2d_array element from history" |
| gdb_test -nonl "output \$\$5\[5\]\[1\]" \ |
| "<unavailable>" \ |
| "output unavailable large_2d_array element from history" |
| |
| gdb_test "print \$\$5\[5\]\[0\] + \$\$5\[5\]\[1\]" \ |
| "value is not available" \ |
| "print expression referring unavailable element from history" |
| gdb_test "output \$\$5\[5\]\[0\] + \$\$5\[5\]\[1\]" \ |
| "value is not available" \ |
| "output expression referring unavailable element from history" |
| } |