1 # Copyright
(C
) 2008-2022 Free Software Foundation
, Inc.
3 # This
program is free software
; you can redistribute it and
/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation
; either version
3 of the License
, or
6 #
(at your option
) any later version.
8 # This
program is distributed in the hope that it will be useful
,
9 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License
for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this
program.
If not
, see
<http
://www.gnu.org
/licenses
/>.
16 # This file is part of the GDB testsuite. It tests Python
-based
17 # pretty
-printing
for the CLI.
19 load_lib gdb
-python.exp
23 # Start with a fresh gdb.
27 # Skip all tests
if Python scripting is not enabled.
28 if { [skip_python_tests
] } { continue }
30 proc run_lang_tests
{exefile lang
} {
31 global srcdir subdir srcfile testfile hex
32 if { [gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
33 untested
"failed to compile in $lang mode"
39 # Start with a fresh gdb.
42 gdb_reinitialize_dir $srcdir
/$subdir
45 if ![runto_main
] then {
46 perror
"couldn't run to breakpoint"
50 gdb_test_no_output
"set print pretty on"
52 gdb_breakpoint
[gdb_get_line_number
"break to inspect" ${testfile}.c]
53 gdb_continue_to_breakpoint
"break to inspect" ".*break to inspect.*"
56 set remote_python_file
[gdb_remote_download host \
57 $
{srcdir
}/$
{subdir
}/$
{testfile
}.py
]
59 gdb_test_no_output
"source ${remote_python_file}" "load python file"
61 gdb_test
"print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>"
62 gdb_test
"print ssa\[1\]" " = a=< a=<5> b=<$hex>> b=< a=<6> b=<$hex>>"
63 gdb_test
"print ssa" " = {a=< a=<3> b=<$hex>> b=< a=<4> b=<$hex>>, a=< a=<5> b=<$hex>> b=< a=<6> b=<$hex>>}"
65 gdb_test
"print arraystruct" " = {$nl *y = 7, *$nl *x = { a=<23> b=<$hex>, a=<24> b=<$hex>} *$nl *}"
67 # Test that when a pretty
-printer returns a gdb.Value in its to_string
, we
68 #
call the pretty
-printer of that value too.
69 gdb_test
"print tsrvw" " = Inner to_string 1989"
72 gdb_test
"print cps" "= a=<8> b=<$hex>"
73 gdb_test
"print cpss" " = {$nl *zss = 9, *$nl *s = a=<10> b=<$hex>$nl}"
74 gdb_test
"print cpssa\[0\]" " = {$nl *zss = 11, *$nl *s = a=<12> b=<$hex>$nl}"
75 gdb_test
"print cpssa\[1\]" " = {$nl *zss = 13, *$nl *s = a=<14> b=<$hex>$nl}"
76 gdb_test
"print cpssa" " = {{$nl *zss = 11, *$nl *s = a=<12> b=<$hex>$nl *}, {$nl *zss = 13, *$nl *s = a=<14> b=<$hex>$nl *}}"
77 gdb_test
"print sss" "= a=<15> b=< a=<8> b=<$hex>>"
78 gdb_test
"print ref" "= a=<15> b=< a=<8> b=<$hex>>"
79 gdb_test
"print derived" \
80 " = \{.*<Vbase1> = pp class name: Vbase1.*<Vbase2> = \{.*<VirtualTest> = pp value variable is: 1,.*members of Vbase2:.*_vptr.Vbase2 = $hex.*<Vbase3> = \{.*members of Vbase3.*members of Derived:.*value = 2.*"
81 gdb_test
"print ns " "\"embedded\\\\000null\\\\000string\"" \
82 "print ns with default element limit"
83 gdb_test_no_output
"set print elements 3"
84 gdb_test
"print ns" "emb\.\.\.." \
85 "print ns with element limit of 3"
86 gdb_test_no_output
"set print elements 10"
87 gdb_test
"print ns" "embedded\\\\000n\.\.\.." \
88 "print ns with element limit of 10"
89 gdb_test_no_output
"set print elements 200"
92 if { ![is_address_zero_readable
] } {
93 gdb_test
"print ns2" \
94 ".error reading variable: Cannot access memory at address 0x0."
97 gdb_test
"print x" " = \"this is x\""
98 gdb_test
"print cstring" " = \"const string\""
100 gdb_test
"print estring" " = \"embedded x\\\\201\\\\202\\\\203\\\\204\""
101 if { ![is_address_zero_readable
] } {
102 gdb_test
"print estring3" \
103 " = <error reading variable: Cannot create a lazy string with address 0x0, and a non-zero length.>"
106 gdb_test_no_output
"python pp_ls_encoding = 'UTF-8'"
107 gdb_test
"print estring2" "\"embedded \", <incomplete sequence \\\\302>"
109 gdb_test_no_output
"set python print-stack full"
110 gdb_test
"print hint_error" "Exception: hint failed\r\nhint_error_val"
112 gdb_test
"print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}" \
113 "print c, pretty printing on, default display hint"
115 gdb_test_no_output
"set variable c.is_array_p=1"
116 gdb_test
"print c" " = container \"container\" with 2 elements = \\{23, 72\\}" \
117 "print c, pretty printing on, display hint is now array"
119 # Setting is_map_p
while _is_array_p is also
set will cause the
120 # display_hint method to raise an exception
(see py
-prettyprint.py
).
121 gdb_test_no_output
"set variable c.is_map_p=1"
123 # This test checks what happens when the display hint throws an
124 # error. GDB just treats this as though the display hint was
128 "Traceback\[^\r\n\]+" \
129 "\\s+File \"\[^\r\n\]+/py-prettyprint.py\", line \[0-9\]+, in display_hint" \
130 "\\s+raise Exception\[^\r\n\]+" \
131 "Exception: invalid object state found in display_hint"]
134 " = ${py_exception}" \
135 "container \"container\" with 2 elements = {" \
136 "\\s+\\\[0\\\] = 23," \
137 "\\s+\\\[1\\\] = 72" \
139 "print c, pretty printing on, exception raised from display_hint"
141 # Unset is_array_p so that display_hint no longer raises an
143 gdb_test_no_output
"set variable c.is_array_p=0"
145 gdb_test
"print c" " = container \"container\" with 2 elements = \{$nl \\\[23\\\] = 72$nl\}" \
146 "print c, pretty printing on, display hint is now map"
148 gdb_test
"print nstype" " = {$nl *.0. = 7,$nl *.1. = 42$nl}"
150 gdb_test_no_output
"set print pretty off"
151 gdb_test
"print nstype" " = {.0. = 7, .1. = 42}" \
152 "print nstype on one line"
154 # Now we have pretty printing turned
off, try printing
'c' again.
155 gdb_test
"print c" " = container \"container\" with 2 elements = \{\\\[23\\\] = 72\}" \
156 "print c, pretty printing off, display hint is now map"
158 gdb_test_no_output
"set variable c.is_map_p=0"
159 gdb_test
"print c" " = container \"container\" with 2 elements = \{\\\[0\\\] = 23, \\\[1\\\] = 72\}" \
160 "print c, pretty printing off, default display hint"
162 # Check that GDB doesn
't lose typedefs when looking for a printer.
163 gdb_test "print an_int" " = -1"
164 gdb_test "print (int) an_int" " = -1"
165 gdb_test "print (int_type) an_int" " = type=int_type, val=-1"
167 gdb_test "print an_int_type" " = type=int_type, val=1"
168 gdb_test "print (int_type) an_int_type" " = type=int_type, val=1"
170 gdb_test "print an_int_type2" " = type=int_type2, val=2"
171 gdb_test "print (int) an_int_type2" " = 2"
172 gdb_test "print (int_type) an_int_type2" " = type=int_type, val=2"
173 gdb_test "print (int_type2) an_int_type2" " = type=int_type2, val=2"
175 # PR python/16047: it is ok for a pretty printer not to have a
177 gdb_test "print (int_type3) an_int_type2" " = {s = 27}"
183 if { [run_lang_tests "${binfile}" "c"] == -1 } {
187 with_test_prefix c++ {
188 if { [run_lang_tests "${binfile}-cxx" "c++"] == -1 } {
193 # Run various other tests.
195 # Start with a fresh gdb.
198 gdb_reinitialize_dir $srcdir/$subdir
201 if ![runto_main ] then {
202 perror "couldn't run to breakpoint
"
206 set remote_python_file
[gdb_remote_download host \
207 $
{srcdir
}/$
{subdir
}/$
{testfile
}.py
]
209 gdb_test_no_output
"source ${remote_python_file}" "load python file"
211 gdb_breakpoint
[gdb_get_line_number
"eval-break"]
212 gdb_continue_to_breakpoint
"eval-break" ".* eval-break .*"
214 gdb_test
"info locals" "eval9 = eval=<123456789>"
216 gdb_breakpoint
[gdb_get_line_number
"break to inspect" ${testfile}.c ]
217 gdb_continue_to_breakpoint
"break to inspect" ".*break to inspect.*"
219 gdb_test
"print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>" \
220 "print ss enabled #1"
222 gdb_test_no_output
"python disable_lookup_function ()"
224 gdb_test
"print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
227 gdb_test_no_output
"python enable_lookup_function ()"
229 gdb_test
"print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>" \
230 "print ss enabled #2"
232 gdb_test
"print -raw-values -- ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
233 "print -raw-values -- ss"
235 gdb_test
"print -raw-values on -- ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
236 "print -raw-values on -- ss"
238 gdb_test
"with print raw-values -- print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
239 "with print raw-values -- print ss"
241 # Test interaction between
/r format and raw
-values option
:
242 # When
/r is not present
, raw
-values option tells to bypass
(or not
) the pretty printers.
243 #
(these cases are tested above
).
244 # When
/r is present
, it must override the option raw
-values off.
245 gdb_test
"print /r ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}"
247 gdb_test
"with print raw-values off -- print /r ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}"
249 gdb_test
"print -raw-values off -- /r ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}"