[PATCH v2] gdb/DAP Fix LazyString not serializable exception
Simon Farre
simon.farre.cx@gmail.com
Fri Jun 23 08:48:32 GMT 2023
v2.
Apparently str(some_lazy_string) does not make LazyString eagerly fetch
it's value. However, this v2 patch *does* work for LazyStrings and as
such, this v2 is now identical to the previously referenced patch
(where this part was removed).
v1
Fixed this bug in v1 of a patch that later got removed.
I couldn't reproduce the issue, but now I've found out what it is.
I've reproduced it by basically sending two evaluate requests, "source
prettyprinter.py" (the stdlib pretty printer, to be exact) and "py
register_libstdcxx_printers(gdb.current_objfile())" - i.e. the standard
library pretty printer registering.
That's when an exception is raised by the DAP Python code. It is most
likely because the pretty printers somewhere, for something, returns a
LazyString instead of string.
This patch will make variable references value always be str(...) to
make sure that it converts it to a value that can be serialiable by
json.dumps.
---
gdb/python/lib/gdb/dap/varref.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gdb/python/lib/gdb/dap/varref.py b/gdb/python/lib/gdb/dap/varref.py
index 213151fd3d3..8dc6cf97613 100644
--- a/gdb/python/lib/gdb/dap/varref.py
+++ b/gdb/python/lib/gdb/dap/varref.py
@@ -152,7 +152,9 @@ class VariableReference(BaseReference):
def to_object(self):
result = super().to_object()
- result[self.result_name] = self.printer.to_string()
+ result[self.result_name] = (
+ str(self.value) if self.ref == 0 else str(self.printer.to_string())
+ )
num_children = self.child_count()
if num_children is not None:
if (
--
2.41.0
More information about the Gdb-patches
mailing list