diff options
Diffstat (limited to 'src/client/linux/handler/minidump_descriptor.h')
-rw-r--r-- | src/client/linux/handler/minidump_descriptor.h | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/src/client/linux/handler/minidump_descriptor.h b/src/client/linux/handler/minidump_descriptor.h index 9ffe622b..ed656cee 100644 --- a/src/client/linux/handler/minidump_descriptor.h +++ b/src/client/linux/handler/minidump_descriptor.h @@ -37,18 +37,25 @@ #include "common/using_std_string.h" -// The MinidumpDescriptor describes how to access a minidump: it can contain -// either a file descriptor or a path. -// Note that when using files, it is created with the path to a directory. -// The actual path where the minidump is generated is created by this class. +// This class describes how a crash dump should be generated, either: +// - Writing a full minidump to a file in a given directory (the actual path, +// inside the directory, is determined by this class). +// - Writing a full minidump to a given fd. +// - Writing a reduced microdump to the console (logcat on Android). namespace google_breakpad { class MinidumpDescriptor { public: - MinidumpDescriptor() : fd_(-1), size_limit_(-1) {} + struct MicrodumpOnConsole {}; + static const MicrodumpOnConsole kMicrodumpOnConsole; + + MinidumpDescriptor() : mode_(kUninitialized), + fd_(-1), + size_limit_(-1) {} explicit MinidumpDescriptor(const string& directory) - : fd_(-1), + : mode_(kWriteMinidumpToFile), + fd_(-1), directory_(directory), c_path_(NULL), size_limit_(-1) { @@ -56,16 +63,24 @@ class MinidumpDescriptor { } explicit MinidumpDescriptor(int fd) - : fd_(fd), + : mode_(kWriteMinidumpToFd), + fd_(fd), c_path_(NULL), size_limit_(-1) { assert(fd != -1); } + explicit MinidumpDescriptor(const MicrodumpOnConsole&) + : mode_(kWriteMicrodumpToConsole), + fd_(-1), + size_limit_(-1) {} + explicit MinidumpDescriptor(const MinidumpDescriptor& descriptor); MinidumpDescriptor& operator=(const MinidumpDescriptor& descriptor); - bool IsFD() const { return fd_ != -1; } + static MinidumpDescriptor getMicrodumpDescriptor(); + + bool IsFD() const { return mode_ == kWriteMinidumpToFd; } int fd() const { return fd_; } @@ -73,6 +88,10 @@ class MinidumpDescriptor { const char* path() const { return c_path_; } + bool IsMicrodumpOnConsole() const { + return mode_ == kWriteMicrodumpToConsole; + } + // Updates the path so it is unique. // Should be called from a normal context: this methods uses the heap. void UpdatePath(); @@ -81,6 +100,16 @@ class MinidumpDescriptor { void set_size_limit(off_t limit) { size_limit_ = limit; } private: + enum DumpMode { + kUninitialized = 0, + kWriteMinidumpToFile, + kWriteMinidumpToFd, + kWriteMicrodumpToConsole + }; + + // Specifies the dump mode (see DumpMode). + DumpMode mode_; + // The file descriptor where the minidump is generated. int fd_; |