diff options
Diffstat (limited to 'src/processor/minidump_stackwalk.cc')
-rw-r--r-- | src/processor/minidump_stackwalk.cc | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/processor/minidump_stackwalk.cc b/src/processor/minidump_stackwalk.cc index 0fe7b153..3620e30c 100644 --- a/src/processor/minidump_stackwalk.cc +++ b/src/processor/minidump_stackwalk.cc @@ -35,17 +35,28 @@ #include <stdlib.h> #include <stdio.h> +#include <memory> #include <string> #include "processor/minidump.h" #include "processor/stackwalker_x86.h" +using std::auto_ptr; using std::string; -using namespace google_airbag; - - -int main(int argc, char** argv) { +using google_airbag::MemoryRegion; +using google_airbag::Minidump; +using google_airbag::MinidumpContext; +using google_airbag::MinidumpException; +using google_airbag::MinidumpModuleList; +using google_airbag::MinidumpThread; +using google_airbag::MinidumpThreadList; +using google_airbag::StackFrame; +using google_airbag::StackFrames; +using google_airbag::Stackwalker; + + +int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage: %s <file>\n", argv[0]); exit(1); @@ -57,48 +68,52 @@ int main(int argc, char** argv) { exit(1); } - MinidumpException* exception = minidump.GetException(); + MinidumpException *exception = minidump.GetException(); if (!exception) { fprintf(stderr, "minidump.GetException() failed\n"); exit(1); } - MinidumpThreadList* thread_list = minidump.GetThreadList(); + MinidumpThreadList *thread_list = minidump.GetThreadList(); if (!thread_list) { fprintf(stderr, "minidump.GetThreadList() failed\n"); exit(1); } - MinidumpThread* exception_thread = + MinidumpThread *exception_thread = thread_list->GetThreadByID(exception->GetThreadID()); if (!exception_thread) { fprintf(stderr, "thread_list->GetThreadByID() failed\n"); exit(1); } - MemoryRegion* stack_memory = exception_thread->GetMemory(); + MemoryRegion *stack_memory = exception_thread->GetMemory(); if (!stack_memory) { fprintf(stderr, "exception_thread->GetStackMemory() failed\n"); exit(1); } - MinidumpContext* context = exception->GetContext(); + MinidumpContext *context = exception->GetContext(); if (!context) { fprintf(stderr, "exception->GetContext() failed\n"); exit(1); } - MinidumpModuleList* modules = minidump.GetModuleList(); + MinidumpModuleList *modules = minidump.GetModuleList(); if (!modules) { fprintf(stderr, "minidump.GetModuleList() failed\n"); exit(1); } - StackwalkerX86 stackwalker = StackwalkerX86(context, stack_memory, - modules, NULL); + auto_ptr<Stackwalker> stackwalker( + Stackwalker::StackwalkerForCPU(context, stack_memory, modules, NULL)); + if (!stackwalker.get()) { + fprintf(stderr, "Stackwalker::StackwalkerForCPU failed\n"); + exit(1); + } StackFrames stack; - stackwalker.Walk(&stack); + stackwalker->Walk(&stack); unsigned int index; for (index = 0 ; index < stack.size() ; index++) { |