================
@@ -132,6 +132,84 @@ std::vector<std::string> GetStrings(const
llvm::json::Object *obj,
return strs;
}
+/// Create a short summary for a container that contains the summary of its
+/// first children, so that the user can get a glimpse of its contents at a
+/// glance.
+static std::optional<std::string>
+GetSyntheticSummaryForContainer(lldb::SBValue &v) {
+ if (v.TypeIsPointerType() || !v.MightHaveChildren())
+ return std::nullopt;
+ /// As this operation can be potentially slow, we limit the total time spent
+ /// fetching children to a few ms.
+ const auto max_evaluation_time = std::chrono::milliseconds(10);
+ /// We don't want to generate a extremely long summary string, so we limit
its
+ /// length.
+ const size_t max_length = 32;
+
+ auto start = std::chrono::steady_clock::now();
+ std::string summary;
+ llvm::raw_string_ostream os(summary);
+ os << "{";
+
+ llvm::StringRef separator = "";
+
+ for (size_t i = 0, e = v.GetNumChildren(); i < e; ++i) {
----------------
dwblaikie wrote:
What do other debuggers do? (like Visual Studio itself)
& not sure that `GetNumChildren` should cause indefinite recursive expansion -
could limit this feature to just going one level deep, for instance. But
certainly worth comparing to other debuggers to see what sort of
heuristics/rules/guidelines are good in terms of the amount of data expanded by
default V unexpanded.
(& yeah, if everything's expanded all the way down, that's probably not good)
https://github.com/llvm/llvm-project/pull/65514
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits