diff --git a/gdb/__init__.py b/gdb/__init__.py index 4b55963..590d46c 100644 --- a/gdb/__init__.py +++ b/gdb/__init__.py @@ -640,6 +640,12 @@ def __str__(self) -> str: if type_flags & lldb.eTypeIsPointer: return "0x%x" % self._as_number() + # Check for synthetic children. + if (t.GetTypeClass() == lldb.eTypeClassStruct): + valstr = str(self._sbvalue_object.GetSyntheticValue()) + if (valstr != "No value" and + valstr.find("$1") == -1): + return valstr valstr = self._sbvalue_object.GetSummary() if not valstr: valstr = self._sbvalue_object.GetValue() diff --git a/test/lit/print_elements.test b/test/lit/print_elements.test index d07e7ac..bd28ed8 100644 --- a/test/lit/print_elements.test +++ b/test/lit/print_elements.test @@ -7,7 +7,7 @@ RUN: %lldb -b -o 'command script import print_elements' %t | FileCheck %s Check target.max-children-count values are correctly translated to "print elements" values. -CHECK: gdb.parameter('print elements'): None +CHECK: gdb.parameter('print elements'): 256 CHECK: gdb.parameter('print elements'): 0 CHECK: gdb.parameter('print elements'): 10 @@ -20,3 +20,8 @@ yield child 10. So check that we don't yield 11. CHECK: yielding child 10 CHECK-NOT: yielding child 11 + + +CHECK: yielding child 10 +CHECK: A TestStruct of size 100 +CHECK-NOT: yielding child 11 diff --git a/test/lit/print_elements/__init__.py b/test/lit/print_elements/__init__.py index d442c86..6136e26 100644 --- a/test/lit/print_elements/__init__.py +++ b/test/lit/print_elements/__init__.py @@ -34,7 +34,7 @@ def __lldb_init_module(debugger, internal_dict): gdb.printing.register_pretty_printer(gdb.current_objfile(), printer) # lldb treats all negative values here as 'unlimited'. - # gdb.parameter('print elements') returns None in this case. + # gdb.parameter('print elements') returns 256 in this case. debugger.HandleCommand('settings set -- target.max-children-count -99') print("gdb.parameter('print elements'):", gdb.parameter('print elements')) @@ -51,3 +51,5 @@ def __lldb_init_module(debugger, internal_dict): print("gdb.parameter('print elements'):", gdb.parameter('print elements')) debugger.HandleCommand('p s') + + debugger.HandleCommand("script print(gdb.parse_and_eval('s'))")