mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2026-01-07 06:58:20 +01:00
Initial implementation of minidump reader (#6). r=bryner
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@11 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
07f8ef56ac
commit
3261e8b6ea
14 changed files with 11135 additions and 3403 deletions
110
src/processor/minidump_dump.cc
Normal file
110
src/processor/minidump_dump.cc
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
// Copyright (C) 2006 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// minidump_dump.cc: Print the contents of a minidump file in somewhat
|
||||
// readable text.
|
||||
//
|
||||
// Author: Mark Mentovai
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h>
|
||||
#define O_BINARY 0
|
||||
#else // !_WIN32
|
||||
#include <io.h>
|
||||
#define open _open
|
||||
#endif // !_WIN32
|
||||
|
||||
#include "processor/minidump.h"
|
||||
|
||||
|
||||
using namespace google_airbag;
|
||||
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "usage: %s <file>\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int fd = open(argv[1], O_RDONLY | O_BINARY);
|
||||
if (fd == -1) {
|
||||
printf("open failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Minidump minidump(fd);
|
||||
if (!minidump.Read()) {
|
||||
printf("minidump.Read() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
minidump.Print();
|
||||
|
||||
int error = 0;
|
||||
|
||||
MinidumpThreadList* threadList = minidump.GetThreadList();
|
||||
if (!threadList) {
|
||||
error |= 1 << 2;
|
||||
printf("minidump.GetThreadList() failed\n");
|
||||
} else {
|
||||
threadList->Print();
|
||||
}
|
||||
|
||||
MinidumpModuleList* moduleList = minidump.GetModuleList();
|
||||
if (!moduleList) {
|
||||
error |= 1 << 3;
|
||||
printf("minidump.GetModuleList() failed\n");
|
||||
} else {
|
||||
moduleList->Print();
|
||||
}
|
||||
|
||||
MinidumpMemoryList* memoryList = minidump.GetMemoryList();
|
||||
if (!memoryList) {
|
||||
error |= 1 << 4;
|
||||
printf("minidump.GetMemoryList() failed\n");
|
||||
} else {
|
||||
memoryList->Print();
|
||||
}
|
||||
|
||||
MinidumpException* exception = minidump.GetException();
|
||||
if (!exception) {
|
||||
error |= 1 << 5;
|
||||
printf("minidump.GetException() failed\n");
|
||||
} else {
|
||||
exception->Print();
|
||||
}
|
||||
|
||||
MinidumpSystemInfo* systemInfo = minidump.GetSystemInfo();
|
||||
if (!systemInfo) {
|
||||
error |= 1 << 6;
|
||||
printf("minidump.GetSystemInfo() failed\n");
|
||||
} else {
|
||||
systemInfo->Print();
|
||||
}
|
||||
|
||||
MinidumpMiscInfo* miscInfo = minidump.GetMiscInfo();
|
||||
if (!miscInfo) {
|
||||
error |= 1 << 7;
|
||||
printf("minidump.GetMiscInfo() failed\n");
|
||||
} else {
|
||||
miscInfo->Print();
|
||||
}
|
||||
|
||||
// Use return instead of exit to allow destructors to run.
|
||||
return(error);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue