| Index: base/debug/debugger_posix.cc
|
| diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc
|
| index a1551a397187824ac6c52a81ffaad0d4e6b0cf45..b3c9bc803f5218e33d479f22cd8fddd0a0e2c571 100644
|
| --- a/base/debug/debugger_posix.cc
|
| +++ b/base/debug/debugger_posix.cc
|
| @@ -44,6 +44,11 @@
|
| #include "base/third_party/symbolize/symbolize.h"
|
| #endif
|
|
|
| +#if defined(OS_ANDROID)
|
| +#include <execinfo.h>
|
| +#include "base/threading/platform_thread.h"
|
| +#endif
|
| +
|
| namespace base {
|
| namespace debug {
|
|
|
| @@ -94,7 +99,7 @@ bool BeingDebugged() {
|
| return being_debugged;
|
| }
|
|
|
| -#elif defined(OS_LINUX)
|
| +#elif defined(OS_LINUX) || defined(OS_ANDROID)
|
|
|
| // We can look in /proc/self/status for TracerPid. We are likely used in crash
|
| // handling, so we are careful not to use the heap or have side effects.
|
| @@ -161,7 +166,7 @@ bool BeingDebugged() {
|
| // Linux: Debug mode, send SIGTRAP; Release mode, send SIGABRT.
|
| // Mac: Always send SIGTRAP.
|
|
|
| -#if defined(NDEBUG) && !defined(OS_MACOSX)
|
| +#if defined(NDEBUG) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
|
| #define DEBUG_BREAK() abort()
|
| #elif defined(OS_NACL)
|
| // The NaCl verifier doesn't let use use int3. For now, we call abort(). We
|
| @@ -169,7 +174,21 @@ bool BeingDebugged() {
|
| // http://code.google.com/p/nativeclient/issues/detail?id=645
|
| #define DEBUG_BREAK() abort()
|
| #elif defined(ARCH_CPU_ARM_FAMILY)
|
| +#if defined(OS_ANDROID)
|
| +// Though Android has a "helpful" process called debuggerd to catch native
|
| +// signals on the general assumption that they are fatal errors, we've had great
|
| +// difficulty continuing in a debugger once we stop from SIGINT triggered by
|
| +// native code.
|
| +//
|
| +// Use GDB to set |go| to 1 to resume execution.
|
| +#define DEBUG_BREAK() do { \
|
| + volatile int go = 0; \
|
| + while (!go) { base::PlatformThread::Sleep(100); } \
|
| +} while (0)
|
| +#else
|
| +// ARM && !ANDROID
|
| #define DEBUG_BREAK() asm("bkpt 0")
|
| +#endif
|
| #else
|
| #define DEBUG_BREAK() asm("int3")
|
| #endif
|
|
|