aboutsummaryrefslogtreecommitdiff
path: root/src/processor/minidump_processor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/processor/minidump_processor.cc')
-rw-r--r--src/processor/minidump_processor.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
index eb520709..f58b54ba 100644
--- a/src/processor/minidump_processor.cc
+++ b/src/processor/minidump_processor.cc
@@ -27,10 +27,14 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#include <memory>
+
#include "google/minidump_processor.h"
#include "processor/minidump.h"
#include "processor/stackwalker_x86.h"
+using std::auto_ptr;
+
namespace google_airbag {
MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier)
@@ -68,10 +72,14 @@ bool MinidumpProcessor::Process(const string &minidump_file,
return false;
}
- // TODO(bryner): figure out which StackWalker we want
- StackwalkerX86 walker(exception->GetContext(), thread_memory,
- dump.GetModuleList(), supplier_);
- walker.Walk(stack_frames);
+ auto_ptr<Stackwalker> walker(
+ Stackwalker::StackwalkerForCPU(exception->GetContext(), thread_memory,
+ dump.GetModuleList(), supplier_));
+ if (!walker.get()) {
+ return false;
+ }
+
+ walker->Walk(stack_frames);
return true;
}