mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2024-11-28 01:54:14 +01:00
Reduce calls to SymbolSupplier::GetSymbolFile() (#48).
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@40 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
8b1645d8cd
commit
181f307ffe
@ -165,6 +165,10 @@ bool SourceLineResolver::LoadModule(const string &module_name,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SourceLineResolver::HasModule(const string &module_name) const {
|
||||||
|
return modules_->find(module_name) != modules_->end();
|
||||||
|
}
|
||||||
|
|
||||||
void SourceLineResolver::FillSourceLineInfo(StackFrame *frame,
|
void SourceLineResolver::FillSourceLineInfo(StackFrame *frame,
|
||||||
StackFrameInfo *frame_info) const {
|
StackFrameInfo *frame_info) const {
|
||||||
ModuleMap::const_iterator it = modules_->find(frame->module_name);
|
ModuleMap::const_iterator it = modules_->find(frame->module_name);
|
||||||
|
@ -60,6 +60,9 @@ class SourceLineResolver {
|
|||||||
// map_file should contain line/address mappings for this module.
|
// map_file should contain line/address mappings for this module.
|
||||||
bool LoadModule(const string &module_name, const string &map_file);
|
bool LoadModule(const string &module_name, const string &map_file);
|
||||||
|
|
||||||
|
// Returns true if a module with the given name has been loaded.
|
||||||
|
bool HasModule(const string &module_name) const;
|
||||||
|
|
||||||
// Fills in the function_base, function_name, source_file_name,
|
// Fills in the function_base, function_name, source_file_name,
|
||||||
// and source_line fields of the StackFrame. The instruction and
|
// and source_line fields of the StackFrame. The instruction and
|
||||||
// module_name fields must already be filled in. Additional debugging
|
// module_name fields must already be filled in. Additional debugging
|
||||||
|
@ -69,7 +69,9 @@ static bool RunTests() {
|
|||||||
|
|
||||||
SourceLineResolver resolver;
|
SourceLineResolver resolver;
|
||||||
ASSERT_TRUE(resolver.LoadModule("module1", testdata_dir + "/module1.out"));
|
ASSERT_TRUE(resolver.LoadModule("module1", testdata_dir + "/module1.out"));
|
||||||
|
ASSERT_TRUE(resolver.HasModule("module1"));
|
||||||
ASSERT_TRUE(resolver.LoadModule("module2", testdata_dir + "/module2.out"));
|
ASSERT_TRUE(resolver.LoadModule("module2", testdata_dir + "/module2.out"));
|
||||||
|
ASSERT_TRUE(resolver.HasModule("module2"));
|
||||||
|
|
||||||
StackFrame frame;
|
StackFrame frame;
|
||||||
StackFrameInfo frame_info;
|
StackFrameInfo frame_info;
|
||||||
@ -112,8 +114,11 @@ static bool RunTests() {
|
|||||||
|
|
||||||
ASSERT_FALSE(resolver.LoadModule("module3",
|
ASSERT_FALSE(resolver.LoadModule("module3",
|
||||||
testdata_dir + "/module3_bad.out"));
|
testdata_dir + "/module3_bad.out"));
|
||||||
|
ASSERT_FALSE(resolver.HasModule("module3"));
|
||||||
ASSERT_FALSE(resolver.LoadModule("module4",
|
ASSERT_FALSE(resolver.LoadModule("module4",
|
||||||
testdata_dir + "/invalid-filename"));
|
testdata_dir + "/invalid-filename"));
|
||||||
|
ASSERT_FALSE(resolver.HasModule("module4"));
|
||||||
|
ASSERT_FALSE(resolver.HasModule("invalid-module"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,14 +78,13 @@ void Stackwalker::Walk(StackFrames *frames) {
|
|||||||
if (module) {
|
if (module) {
|
||||||
frame->module_name = *(module->GetName());
|
frame->module_name = *(module->GetName());
|
||||||
frame->module_base = module->base_address();
|
frame->module_base = module->base_address();
|
||||||
if (modules_ && supplier_) {
|
if (!resolver.HasModule(frame->module_name) && supplier_) {
|
||||||
string symbol_file =
|
string symbol_file = supplier_->GetSymbolFile(module);
|
||||||
supplier_->GetSymbolFile(module);
|
|
||||||
if (!symbol_file.empty()) {
|
if (!symbol_file.empty()) {
|
||||||
resolver.LoadModule(*(module->GetName()), symbol_file);
|
resolver.LoadModule(frame->module_name, symbol_file);
|
||||||
resolver.FillSourceLineInfo(frame.get(), frame_info.get());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
resolver.FillSourceLineInfo(frame.get(), frame_info.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user