[Lldb-commits] [lldb] Summarize std::string's when created from data. (PR #89110)
Greg Clayton via lldb-commits
lldb-commits at lists.llvm.org
Mon Apr 29 16:01:39 PDT 2024
================
@@ -287,8 +291,52 @@ bool lldb_private::formatters::LibStdcppStringSummaryProvider(
} else
return true;
} break;
- case eAddressTypeHost:
- break;
+ case eAddressTypeHost: {
+
+ DataExtractor data;
+ Status error;
+ valobj.GetData(data, error);
+ if (error.Fail())
+ return false;
+
+ lldb::offset_t offset = 0;
+ AddressType child_addressType = valobj.GetAddressTypeOfChildren();
+ if (child_addressType == eAddressTypeLoad)
+ {
+ // We have the host address of our std::string
+ // But we need to read the pointee data from the debugged process.
+ ProcessSP process_sp(valobj.GetProcessSP());
+ // We want to read the address from std::string, which is the first 8 bytes.
+ lldb::addr_t addr = data.GetAddress(&offset);
+ if (!addr)
+ {
+ stream.Printf("nullptr");
+ return true;
+ }
+ std::string contents;
+ process_sp->ReadCStringFromMemory(addr, contents, error);
+ if (error.Fail())
+ return false;
+
+ stream.Printf("%s", contents.c_str());
+ return true;
+ }
+
+ if (child_addressType == eAddressTypeHost)
+ {
----------------
clayborg wrote:
The `{` goes at the end of the `if` line per llvm coding guidelines
https://github.com/llvm/llvm-project/pull/89110
More information about the lldb-commits
mailing list