Skip to content

Commit c3c1df5

Browse files
committed
Implement display_hint in gdb pretty printers
A few pretty-printers were returning a quoted string from their to_string method. It's preferable in gdb to return a lazy string and to let gdb handle the display by having a "display_hint" method that returns "string" -- it lets gdb settings (like "set print ...") work, it handles corrupted strings a bit better, and it passes the information along to IDEs.
1 parent a8feaee commit c3c1df5

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/etc/gdb_rust_pretty_printing.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,10 @@ def __init__(self, val):
248248
def to_string(self):
249249
(length, data_ptr) = rustpp.extract_length_and_ptr_from_slice(self.__val)
250250
raw_ptr = data_ptr.get_wrapped_value()
251-
return '"%s"' % raw_ptr.string(encoding="utf-8", length=length)
251+
return raw_ptr.lazy_string(encoding="utf-8", length=length)
252+
253+
def display_hint(self):
254+
return "string"
252255

253256

254257
class RustStdVecPrinter(object):
@@ -278,9 +281,11 @@ def __init__(self, val):
278281
def to_string(self):
279282
vec = self.__val.get_child_at_index(0)
280283
(length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec(vec)
281-
return '"%s"' % data_ptr.get_wrapped_value().string(encoding="utf-8",
282-
length=length)
284+
return data_ptr.get_wrapped_value().lazy_string(encoding="utf-8",
285+
length=length)
283286

287+
def display_hint(self):
288+
return "string"
284289

285290
class RustOsStringPrinter(object):
286291
def __init__(self, val):
@@ -294,8 +299,10 @@ def to_string(self):
294299

295300
(length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec(
296301
vec)
297-
return '"%s"' % data_ptr.get_wrapped_value().string(length=length)
302+
return data_ptr.get_wrapped_value().lazy_string(length=length)
298303

304+
def display_hint(self):
305+
return "string"
299306

300307
class RustCStyleVariantPrinter(object):
301308
def __init__(self, val):

src/test/debuginfo/pretty-std.rs

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
// gdb-command: print some_string
4545
// gdb-check:$8 = Some = {"IAMA optional string!"}
4646

47+
// gdb-command: set print length 5
48+
// gdb-command: print some_string
49+
// gdb-check:$8 = Some = {"IAMA "...}
50+
4751

4852
// === LLDB TESTS ==================================================================================
4953

0 commit comments

Comments
 (0)