Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
[lldb] Add new stats (# symbols loaded, # symbol tables loaded) to mo…
…dule and target

Summary:

Test Plan:

Reviewers:

Subscribers:

Tasks:

Tags:

Differential Revision: https://phabricator.intern.facebook.com/D73117709
  • Loading branch information
royitaqi committed Apr 17, 2025
commit 4157b0d1426830a4c19af7401728ef86dbc2d8c9
1 change: 1 addition & 0 deletions lldb/include/lldb/Target/Statistics.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ struct ModuleStats {
llvm::StringMap<llvm::json::Value> type_system_stats;
double symtab_parse_time = 0.0;
double symtab_index_time = 0.0;
uint32_t num_symbols_loaded = 0;
double debug_parse_time = 0.0;
double debug_index_time = 0.0;
uint64_t debug_info_size = 0;
Expand Down
18 changes: 13 additions & 5 deletions lldb/source/Target/Statistics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ json::Value ModuleStats::ToJSON() const {
module.try_emplace("debugInfoHadIncompleteTypes",
debug_info_had_incomplete_types);
module.try_emplace("symbolTableStripped", symtab_stripped);
module.try_emplace("symbolsLoaded", num_symbols_loaded);
if (!symfile_path.empty())
module.try_emplace("symbolFilePath", symfile_path);

Expand Down Expand Up @@ -293,7 +294,8 @@ llvm::json::Value DebuggerStats::ReportStatistics(
double debug_parse_time = 0.0;
double debug_index_time = 0.0;
uint32_t symtabs_loaded = 0;
uint32_t symtabs_saved = 0;
uint32_t symtabs_loaded_from_cache = 0;
uint32_t symtabs_saved_to_cache = 0;
uint32_t debug_index_loaded = 0;
uint32_t debug_index_saved = 0;
uint64_t debug_info_size = 0;
Expand All @@ -309,6 +311,7 @@ llvm::json::Value DebuggerStats::ReportStatistics(
uint32_t num_modules_with_variable_errors = 0;
uint32_t num_modules_with_incomplete_types = 0;
uint32_t num_stripped_modules = 0;
uint32_t num_symbols_loaded = 0;
for (size_t image_idx = 0; image_idx < num_modules; ++image_idx) {
Module *module = target != nullptr
? target->GetImages().GetModuleAtIndex(image_idx).get()
Expand All @@ -318,12 +321,15 @@ llvm::json::Value DebuggerStats::ReportStatistics(
module_stat.symtab_index_time = module->GetSymtabIndexTime().get().count();
Symtab *symtab = module->GetSymtab(/*can_create=*/false);
if (symtab) {
module_stat.num_symbols_loaded = symtab->GetNumSymbols();
num_symbols_loaded += module_stat.num_symbols_loaded;
symtabs_loaded++;
module_stat.symtab_loaded_from_cache = symtab->GetWasLoadedFromCache();
if (module_stat.symtab_loaded_from_cache)
++symtabs_loaded;
++symtabs_loaded_from_cache;
module_stat.symtab_saved_to_cache = symtab->GetWasSavedToCache();
if (module_stat.symtab_saved_to_cache)
++symtabs_saved;
++symtabs_saved_to_cache;
}
SymbolFile *sym_file = module->GetSymbolFile(/*can_create=*/false);
if (sym_file) {
Expand Down Expand Up @@ -393,8 +399,9 @@ llvm::json::Value DebuggerStats::ReportStatistics(
json::Object global_stats{
{"totalSymbolTableParseTime", symtab_parse_time},
{"totalSymbolTableIndexTime", symtab_index_time},
{"totalSymbolTablesLoadedFromCache", symtabs_loaded},
{"totalSymbolTablesSavedToCache", symtabs_saved},
{"totalSymbolTablesLoaded", symtabs_loaded},
{"totalSymbolTablesLoadedFromCache", symtabs_loaded_from_cache},
{"totalSymbolTablesSavedToCache", symtabs_saved_to_cache},
{"totalDebugInfoParseTime", debug_parse_time},
{"totalDebugInfoIndexTime", debug_index_time},
{"totalDebugInfoIndexLoadedFromCache", debug_index_loaded},
Expand All @@ -407,6 +414,7 @@ llvm::json::Value DebuggerStats::ReportStatistics(
num_modules_with_incomplete_types},
{"totalDebugInfoEnabled", num_debug_info_enabled_modules},
{"totalSymbolTableStripped", num_stripped_modules},
{"totalSymbolsLoaded", num_symbols_loaded},
};

if (include_targets) {
Expand Down
23 changes: 18 additions & 5 deletions lldb/test/API/commands/statistics/basic/TestStats.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ def test_default_no_run(self):
"""
self.build()
target = self.createTestTarget()

# Verify top-level keys.
debug_stats = self.get_stats()
debug_stat_keys = [
"memory",
Expand All @@ -168,23 +170,34 @@ def test_default_no_run(self):
"totalSymbolTableIndexTime",
"totalSymbolTablesLoadedFromCache",
"totalSymbolTablesSavedToCache",
"totalSymbolsLoaded",
"totalDebugInfoByteSize",
"totalDebugInfoIndexTime",
"totalDebugInfoIndexLoadedFromCache",
"totalDebugInfoIndexSavedToCache",
"totalDebugInfoParseTime",
]
self.verify_keys(debug_stats, '"debug_stats"', debug_stat_keys, None)
stats = debug_stats["targets"][0]
keys_exist = [

# Verify target stats keys.
target_stats = debug_stats["targets"][0]
target_stat_keys_exist = [
"expressionEvaluation",
"frameVariable",
"moduleIdentifiers",
"targetCreateTime",
]
keys_missing = ["firstStopTime", "launchOrAttachTime"]
self.verify_keys(stats, '"stats"', keys_exist, keys_missing)
self.assertGreater(stats["targetCreateTime"], 0.0)
target_stat_keys_missing = ["firstStopTime", "launchOrAttachTime"]
self.verify_keys(target_stats, '"target_stats"', target_stat_keys_exist, target_stat_keys_missing)
self.assertGreater(target_stats["targetCreateTime"], 0.0)

# Verify module stats keys.
for module_stats in debug_stats["modules"]:
module_stat_keys_exist = [
"symbolsLoaded",
]
self.verify_keys(module_stats, '"module_stats"', module_stat_keys_exist, None)


def test_default_with_run(self):
"""Test "statistics dump" when running the target to a breakpoint.
Expand Down
Loading