Add the capability to include an arbitrary data stream within minidumps

This is supplied via a custom field "custom-data-stream"
Review URL: https://breakpad.appspot.com/408002

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@984 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
cdn@chromium.org
2012-07-10 18:52:07 +00:00
parent 0bed408b15
commit e05aab7b6b
8 changed files with 108 additions and 12 deletions

View File

@@ -31,6 +31,7 @@
#include <objbase.h>
#include <dbghelp.h>
#include "../common/ipc_protocol.h"
#include "../crash_generation/minidump_generator.h"
#include "dump_analysis.h" // NOLINT
@@ -86,7 +87,8 @@ class MinidumpTest: public testing::Test {
}
}
bool WriteDump(ULONG flags) {
bool WriteDump(ULONG flags, MDRawAssertionInfo* assert,
google_breakpad::CustomDataStream* custom_data) {
using google_breakpad::MinidumpGenerator;
// Fake exception is access violation on write to this.
@@ -112,7 +114,8 @@ class MinidumpTest: public testing::Test {
::GetCurrentThreadId(),
::GetCurrentThreadId(),
&ex_ptrs,
NULL,
assert,
custom_data,
static_cast<MINIDUMP_TYPE>(flags),
TRUE,
&dump_file_,
@@ -177,7 +180,7 @@ TEST_F(MinidumpTest, Version) {
}
TEST_F(MinidumpTest, Normal) {
EXPECT_TRUE(WriteDump(MiniDumpNormal));
EXPECT_TRUE(WriteDump(MiniDumpNormal, NULL, NULL));
DumpAnalysis mini(dump_file_);
// We expect threads, modules and some memory.
@@ -206,10 +209,13 @@ TEST_F(MinidumpTest, Normal) {
// We expect no off-stack memory in this dump.
EXPECT_FALSE(mini.HasMemory(this));
// We do not expect a custom data stream.
EXPECT_FALSE(mini.HasStream(MD_CUSTOM_DATA_STREAM));
}
TEST_F(MinidumpTest, SmallDump) {
ASSERT_TRUE(WriteDump(kSmallDumpType));
ASSERT_TRUE(WriteDump(kSmallDumpType, NULL, NULL));
DumpAnalysis mini(dump_file_);
EXPECT_TRUE(mini.HasStream(ThreadListStream));
@@ -240,7 +246,7 @@ TEST_F(MinidumpTest, SmallDump) {
}
TEST_F(MinidumpTest, LargerDump) {
ASSERT_TRUE(WriteDump(kLargerDumpType));
ASSERT_TRUE(WriteDump(kLargerDumpType, NULL, NULL));
DumpAnalysis mini(dump_file_);
// The dump should have all of these streams.
@@ -272,7 +278,7 @@ TEST_F(MinidumpTest, LargerDump) {
}
TEST_F(MinidumpTest, FullDump) {
ASSERT_TRUE(WriteDump(kFullDumpType));
ASSERT_TRUE(WriteDump(kFullDumpType, NULL, NULL));
ASSERT_TRUE(dump_file_ != L"");
ASSERT_TRUE(full_dump_file_ != L"");
DumpAnalysis mini(dump_file_);
@@ -329,4 +335,15 @@ TEST_F(MinidumpTest, FullDump) {
EXPECT_FALSE(full.HasStream(TokenStream));
}
TEST_F(MinidumpTest, CustomData) {
google_breakpad::CustomDataStream custom_data;
custom_data.size = 1;
custom_data.stream[0] = 'A';
EXPECT_TRUE(WriteDump(MiniDumpNormal, NULL, &custom_data));
DumpAnalysis mini(dump_file_);
// We expect a custom data stream.
EXPECT_TRUE(mini.HasStream(MD_CUSTOM_DATA_STREAM));
}
} // namespace