From 60b5f7c7e9a5c0856ce6f0e61af03fcb1fbb54bb Mon Sep 17 00:00:00 2001 From: "ivan.penkov@gmail.com" Date: Wed, 6 Mar 2013 19:32:13 +0000 Subject: Keeping track of modules without symbols during crash report processing. http://breakpad.appspot.com/534002/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1126 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/google_breakpad/processor/process_state.h | 6 ++++++ src/google_breakpad/processor/stackwalker.h | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src/google_breakpad') diff --git a/src/google_breakpad/processor/process_state.h b/src/google_breakpad/processor/process_state.h index 780cb548..d234ebbf 100644 --- a/src/google_breakpad/processor/process_state.h +++ b/src/google_breakpad/processor/process_state.h @@ -106,6 +106,9 @@ class ProcessState { } const SystemInfo* system_info() const { return &system_info_; } const CodeModules* modules() const { return modules_; } + const vector* modules_without_symbols() const { + return &modules_without_symbols_; + } ExploitabilityRating exploitability() const { return exploitability_; } private: @@ -158,6 +161,9 @@ class ProcessState { // ProcessState. const CodeModules *modules_; + // The modules that didn't have symbols when the report was processed. + vector modules_without_symbols_; + // The exploitability rating as determined by the exploitability // engine. When the exploitability engine is not enabled this // defaults to EXPLOITABILITY_NONE. diff --git a/src/google_breakpad/processor/stackwalker.h b/src/google_breakpad/processor/stackwalker.h index 9e678e3c..f09291fe 100644 --- a/src/google_breakpad/processor/stackwalker.h +++ b/src/google_breakpad/processor/stackwalker.h @@ -43,6 +43,7 @@ #include #include +#include #include "common/using_std_string.h" #include "google_breakpad/common/breakpad_types.h" @@ -57,6 +58,7 @@ class MinidumpContext; class StackFrameSymbolizer; using std::set; +using std::vector; class Stackwalker { public: @@ -66,7 +68,15 @@ class Stackwalker { // GetCallerFrame. The frames are further processed to fill all available // data. Returns true if the stackwalk completed, or false if it was // interrupted by SymbolSupplier::GetSymbolFile(). - bool Walk(CallStack* stack); + // Upon return, modules_without_symbols will be populated with pointers to + // the code modules (CodeModule*) that DON'T have symbols. + // modules_without_symbols DOES NOT take ownership of the code modules. + // The lifetime of these code modules is the same as the lifetime of the + // CodeModules passed to the StackWalker constructor (which currently + // happens to be the lifetime of the Breakpad's ProcessingState object). + // There is a check for duplicate modules so no duplicates are expected. + bool Walk(CallStack* stack, + vector* modules_without_symbols); // Returns a new concrete subclass suitable for the CPU that a stack was // generated on, according to the CPU type indicated by the context -- cgit v1.2.1