mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2025-12-31 19:54:30 +01:00
Implement core dump to minidump conversion.
This patch is part of a bigger patch that helps merging the breakpad code
with the modified version in Chromium OS.
Specifically, this patch makes the following changes:
1. Turn the LinuxDumper class into a base class and move ptrace related
code into a new derived class, LinuxPtraceDumper.
2. Add a LinuxCoreDumper class, which is derived from LinuxDumper, to
extract information from a crashed process via a core dump file instead
of ptrace.
3. Add a WriteMinidumpFromCore function to
src/client/linux/minidump_writer/minidump_writer.h,
which uses LinuxCoreDumper to extract information from a core dump file.
4. Add a core2md utility, which simply wraps WriteMinidumpFromCore, for
converting a core dump to a minidump.
BUG=455
TEST=Tested the following:
1. Build on 32-bit and 64-bit Linux with gcc 4.4.3 and gcc 4.6.
2. Build on Mac OS X 10.6.8 with gcc 4.2 and clang 3.0 (with latest gmock).
3. All unit tests pass.
4. Run Chromium OS tests to test core2md.
Review URL: http://breakpad.appspot.com/343001
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@905 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
3822e36b20
commit
30566abed8
16 changed files with 1277 additions and 430 deletions
|
|
@ -141,7 +141,7 @@ TEST(ElfCoreDumpTest, ValidCoreFile) {
|
|||
// TODO(benchan): Revert to use ASSERT_TRUE once the flakiness in
|
||||
// CrashGenerator is identified and fixed.
|
||||
if (!crash_generator.CreateChildCrash(kNumOfThreads, kCrashThread,
|
||||
kCrashSignal)) {
|
||||
kCrashSignal, NULL)) {
|
||||
fprintf(stderr, "ElfCoreDumpTest.ValidCoreFile test is skipped "
|
||||
"due to no core dump generated");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -144,7 +144,8 @@ bool CrashGenerator::SetCoreFileSizeLimit(rlim_t limit) const {
|
|||
}
|
||||
|
||||
bool CrashGenerator::CreateChildCrash(
|
||||
unsigned num_threads, unsigned crash_thread, int crash_signal) {
|
||||
unsigned num_threads, unsigned crash_thread, int crash_signal,
|
||||
pid_t* child_pid) {
|
||||
if (num_threads == 0 || crash_thread >= num_threads)
|
||||
return false;
|
||||
|
||||
|
|
@ -178,6 +179,9 @@ bool CrashGenerator::CreateChildCrash(
|
|||
perror("CrashGenerator: Child process not killed by the expected signal");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (child_pid)
|
||||
*child_pid = pid;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ class CrashGenerator {
|
|||
// a signal with number |crash_signal| to the |crash_thread|-th thread.
|
||||
// Returns true on success.
|
||||
bool CreateChildCrash(unsigned num_threads, unsigned crash_thread,
|
||||
int crash_signal);
|
||||
int crash_signal, pid_t* child_pid);
|
||||
|
||||
// Creates |num_threads| threads in the child process.
|
||||
void CreateThreadsInChildProcess(unsigned num_threads);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue