forked from Imagelibrary/binutils-gdb
gdb-gdb.py: strip typedefs in intrusive_list printer assertion
When debugging gdb itself and trying to print a intrusive_list that has
more than one element, I get:
File "/home/simark/build/binutils-gdb-all-targets/gdb/gdb-gdb.py", line 365, in _children_generator
node_ptr = self._as_node_ptr(elem_ptr)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/simark/build/binutils-gdb-all-targets/gdb/gdb-gdb.py", line 345, in _as_node_ptr
assert elem_ptr.type.code == gdb.TYPE_CODE_PTR
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
This is because node_ptr is a typedef
(intrusive_list_base_iterator::pointer). Add a call to strip_typedefs
to get to the real type.
Enhance gdb.gdb/python-helper.exp with a test that would have caught
this bug.
Change-Id: I3eaca8de5ed06d05756ed979332b6a431e15b700
Approved-By: Andrew Burgess <aburgess@redhat.com>
This commit is contained in:
@@ -342,7 +342,7 @@ class IntrusiveListPrinter:
|
||||
corresponding intrusive_list_node.
|
||||
"""
|
||||
|
||||
assert elem_ptr.type.code == gdb.TYPE_CODE_PTR
|
||||
assert elem_ptr.type.strip_typedefs().code == gdb.TYPE_CODE_PTR
|
||||
|
||||
if self._uses_member_node():
|
||||
# Node as a member: add the member node offset from to the element's
|
||||
|
||||
@@ -111,6 +111,16 @@ proc test_python_helper {} {
|
||||
}
|
||||
}
|
||||
|
||||
# Add a second inferior, useful to the intrusive_list pretty-printer test
|
||||
# below.
|
||||
send_inferior "add-inferior\n"
|
||||
gdb_test_multiple "" "add second inferior in inner GDB" {
|
||||
-i "$inferior_spawn_id"
|
||||
-re "Added inferior 2\r\n$gdb_prompt $" {
|
||||
pass $gdb_test_name
|
||||
}
|
||||
}
|
||||
|
||||
# Send Ctrl-C to the inner GDB, this should kick us back to the
|
||||
# prompt of the outer GDB.
|
||||
send_inferior "\003"
|
||||
@@ -253,6 +263,11 @@ proc test_python_helper {} {
|
||||
# Test the htab_t pretty-printer.
|
||||
gdb_test -prompt $outer_prompt_re "print all_bfds" "htab_t with ${::decimal} elements = \\{${::hex}.*\\}"
|
||||
|
||||
# Test the intrusive_list pretty-printer. A bug occured in the
|
||||
# pretty-printer for lists with more than one element. Verify that
|
||||
# we see both elements of the inferior_list list being printed.
|
||||
gdb_test -prompt $outer_prompt_re "print inferior_list" "intrusive list of inferior = {.*, num = 1,.*, num = 2,.*}"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user