[Lldb-commits] [lldb] [lldb] Add count for number of DWO files loaded in statistics (PR #144424)

via lldb-commits lldb-commits at lists.llvm.org
Wed Jun 18 10:47:24 PDT 2025


================
@@ -33,6 +33,37 @@ static void EmplaceSafeString(llvm::json::Object &obj, llvm::StringRef key,
     obj.try_emplace(key, llvm::json::fixUTF8(str));
 }
 
+static void UpdateDwoFileCounts(SymbolFile *sym_file,
+                                uint32_t &total_dwo_file_count,
+                                uint32_t &total_loaded_dwo_file_count) {
+  // Count DWO files from this symbol file using GetSeparateDebugInfo
+  // For DWP files, this increments counts for both total and successfully
+  // loaded DWO CUs. For non split-dwarf files, these counts should not change
+  StructuredData::Dictionary separate_debug_info;
+  if (sym_file->GetSeparateDebugInfo(separate_debug_info,
+                                     /*errors_only=*/false,
+                                     /*load_all_debug_info=*/false)) {
+    llvm::StringRef type;
+    if (separate_debug_info.GetValueForKeyAsString("type", type) &&
+        type == "dwo") {
+      StructuredData::Array *files;
+      if (separate_debug_info.GetValueForKeyAsArray("separate-debug-info-files",
+                                                    files)) {
+        files->ForEach([&](StructuredData::Object *obj) {
+          if (auto dict = obj->GetAsDictionary()) {
+            total_dwo_file_count++;
+
+            bool loaded = false;
+            if (dict->GetValueForKeyAsBoolean("loaded", loaded) && loaded)
----------------
qxy11 wrote:

This should work for DWP and correctly report the # of parsed CUs (see the unit test added `test_dwp_dwo_file_count` [here](https://github.com/llvm/llvm-project/blob/9b966482264b1c0188d474b013d1db7236da1448/lldb/test/API/commands/statistics/basic/TestStats.py#L618).

My understanding is that each CU has its own `m_dwo` shared_ptr [object](https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp#L973) rather than there being a global DWP reference that's shared. It looks like the DWP file first gets loaded [here](https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp#L87), the specific DWO unit gets indexed [here](https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp#L92), and then only after the specific DWO data for the CU is parsed does `m_dwo` get [set](https://github.com/llvm/llvm-project/blob/main/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp#L146). So in the code for `GetSeparateDebugInfo` it should get the correct per-unit counts.

https://github.com/llvm/llvm-project/pull/144424


More information about the lldb-commits mailing list