Fix Android build.
This patch fixes the Android build, and updates the NDK test application to use the new Linux ExceptionHandler API. + Use string insted of std::string in minidump_descriptor.h Review URL: https://breakpad.appspot.com/433002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1016 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
5f57e963d0
commit
d270dcfa18
4 changed files with 16 additions and 6 deletions
|
@ -77,6 +77,7 @@ LOCAL_ARM_MODE := arm
|
||||||
LOCAL_SRC_FILES := \
|
LOCAL_SRC_FILES := \
|
||||||
src/client/linux/crash_generation/crash_generation_client.cc \
|
src/client/linux/crash_generation/crash_generation_client.cc \
|
||||||
src/client/linux/handler/exception_handler.cc \
|
src/client/linux/handler/exception_handler.cc \
|
||||||
|
src/client/linux/handler/minidump_descriptor.cc \
|
||||||
src/client/linux/log/log.cc \
|
src/client/linux/log/log.cc \
|
||||||
src/client/linux/minidump_writer/linux_dumper.cc \
|
src/client/linux/minidump_writer/linux_dumper.cc \
|
||||||
src/client/linux/minidump_writer/linux_ptrace_dumper.cc \
|
src/client/linux/minidump_writer/linux_ptrace_dumper.cc \
|
||||||
|
|
|
@ -30,14 +30,14 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "client/linux/handler/exception_handler.h"
|
#include "client/linux/handler/exception_handler.h"
|
||||||
|
#include "client/linux/handler/minidump_descriptor.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
bool DumpCallback(const char* dump_path,
|
bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
|
||||||
const char* minidump_id,
|
|
||||||
void* context,
|
void* context,
|
||||||
bool succeeded) {
|
bool succeeded) {
|
||||||
printf("Dump path: %s/%s.dmp\n", dump_path, minidump_id);
|
printf("Dump path: %s\n", descriptor.path());
|
||||||
return succeeded;
|
return succeeded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,9 @@ void Crash() {
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
google_breakpad::ExceptionHandler eh(".", NULL, DumpCallback, NULL, true);
|
google_breakpad::MinidumpDescriptor descriptor(".");
|
||||||
|
google_breakpad::ExceptionHandler eh(descriptor, NULL, DumpCallback,
|
||||||
|
NULL, true, -1);
|
||||||
Crash();
|
Crash();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -326,11 +326,16 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) {
|
||||||
// This is a public interface to HandleSignal that allows the client to
|
// This is a public interface to HandleSignal that allows the client to
|
||||||
// generate a crash dump. This function may run in a compromised context.
|
// generate a crash dump. This function may run in a compromised context.
|
||||||
bool ExceptionHandler::SimulateSignalDelivery(int sig) {
|
bool ExceptionHandler::SimulateSignalDelivery(int sig) {
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
// Android doesn't provide getcontext().
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
siginfo_t siginfo;
|
siginfo_t siginfo;
|
||||||
my_memset(&siginfo, 0, sizeof(siginfo_t));
|
my_memset(&siginfo, 0, sizeof(siginfo_t));
|
||||||
struct ucontext context;
|
struct ucontext context;
|
||||||
getcontext(&context);
|
getcontext(&context);
|
||||||
return HandleSignal(sig, &siginfo, &context);
|
return HandleSignal(sig, &siginfo, &context);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function may run in a compromised context: see the top of the file.
|
// This function may run in a compromised context: see the top of the file.
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "common/using_std_string.h"
|
||||||
|
|
||||||
// The MinidumpDescriptor describes how to access a minidump: it can contain
|
// The MinidumpDescriptor describes how to access a minidump: it can contain
|
||||||
// either a file descriptor or a path.
|
// either a file descriptor or a path.
|
||||||
// Note that when using files, it is created with the path to a directory.
|
// Note that when using files, it is created with the path to a directory.
|
||||||
|
@ -71,9 +73,9 @@ class MinidumpDescriptor {
|
||||||
const int fd_;
|
const int fd_;
|
||||||
|
|
||||||
// The directory where the minidump should be generated.
|
// The directory where the minidump should be generated.
|
||||||
const std::string directory_;
|
const string directory_;
|
||||||
// The full path to the generated minidump.
|
// The full path to the generated minidump.
|
||||||
std::string path_;
|
string path_;
|
||||||
// The C string of |path_|. Precomputed so it can be access from a compromised
|
// The C string of |path_|. Precomputed so it can be access from a compromised
|
||||||
// context.
|
// context.
|
||||||
const char* c_path_;
|
const char* c_path_;
|
||||||
|
|
Loading…
Reference in a new issue