Skip to content

Commit 6a39259

Browse files
untitakermichaelwoerister
authored andcommitted
gdb/lldb: Trim output of vec/slice/array
Fix rust-lang#29467
1 parent 12ff323 commit 6a39259

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

src/etc/gdb_rust_pretty_printing.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -209,15 +209,12 @@ def to_string(self):
209209
("(len: %i)" % length))
210210

211211
def children(self):
212-
cs = []
213212
(length, data_ptr) = rustpp.extract_length_and_ptr_from_slice(self.__val)
213+
214214
assert data_ptr.type.get_dwarf_type_kind() == rustpp.DWARF_TYPE_CODE_PTR
215215
raw_ptr = data_ptr.get_wrapped_value()
216216

217-
for index in range(0, length):
218-
cs.append((str(index), (raw_ptr + index).dereference()))
219-
220-
return cs
217+
return iter_children_pointer(raw_ptr, length)
221218

222219

223220
class RustStringSlicePrinter:
@@ -243,12 +240,9 @@ def to_string(self):
243240
("(len: %i, cap: %i)" % (length, cap)))
244241

245242
def children(self):
246-
cs = []
247243
(length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec(self.__val)
248-
gdb_ptr = data_ptr.get_wrapped_value()
249-
for index in range(0, length):
250-
cs.append((str(index), (gdb_ptr + index).dereference()))
251-
return cs
244+
raw_ptr = data_ptr.get_wrapped_value()
245+
return iter_children_pointer(raw_ptr, length)
252246

253247

254248
class RustStdStringPrinter:
@@ -286,3 +280,7 @@ def get_field_at_index(gdb_val, index):
286280
return field
287281
i += 1
288282
return None
283+
284+
def iter_children_pointer(raw_ptr, length):
285+
for index in range(0, length):
286+
yield str(index), (raw_ptr + index).dereference()

src/etc/lldb_rust_formatters.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import re
1313
import debugger_pretty_printers_common as rustpp
1414

15+
# Maximal amount of array/vec/slice items to print before trimming
16+
MAX_CHILDREN = 100
17+
1518
#===============================================================================
1619
# LLDB Pretty Printing Module for Rust
1720
#===============================================================================
@@ -311,7 +314,18 @@ def render_element(i):
311314
element_type)
312315
return print_val(element_val, internal_dict)
313316

314-
return ', '.join([render_element(i) for i in range(length)])
317+
overflow = length > MAX_CHILDREN
318+
if overflow:
319+
length = MAX_CHILDREN
320+
321+
def render_all():
322+
for i in range(length):
323+
yield render_element(i)
324+
325+
if overflow:
326+
yield ".."
327+
328+
return ', '.join(render_all())
315329

316330

317331
def read_utf8_string(ptr_val, byte_count):

0 commit comments

Comments
 (0)