diff options
author | 2012-09-03 18:35:32 +0900 | |
---|---|---|
committer | 2012-09-03 20:59:05 +0900 | |
commit | 5540acb6765d24ca0257a303beee84cfa139a49f (patch) | |
tree | fa91ea828a512586e5fe457097366d43b9e08bd2 /native/jni/src | |
parent | ab5f9532dbd1ac0469cab32cf97d87f25f45d8b0 (diff) | |
download | latinime-5540acb6765d24ca0257a303beee84cfa139a49f.tar.gz latinime-5540acb6765d24ca0257a303beee84cfa139a49f.tar.xz latinime-5540acb6765d24ca0257a303beee84cfa139a49f.zip |
Add backtrace tool
Change-Id: I2795bedf8d8fd545ae411e74b65770d520c715c4
Diffstat (limited to 'native/jni/src')
-rw-r--r-- | native/jni/src/defines.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h index 9b530077a..28661ab20 100644 --- a/native/jni/src/defines.h +++ b/native/jni/src/defines.h @@ -83,12 +83,38 @@ static inline void dumpWordInt(const int *word, const int length) { AKLOGI("i[ %s ]", charBuf); } +#ifndef __ANDROID__ +#define ASSERT(success) do { if(!success) { showStackTrace(); assert(success);};} while (0) +#define SHOW_STACK_TRACE do { showStackTrace(); } while (0) + +#include <execinfo.h> +#include <stdlib.h> +static inline void showStackTrace() { + void *callstack[128]; + int i, frames = backtrace(callstack, 128); + char **strs = backtrace_symbols(callstack, frames); + for (i = 0; i < frames; ++i) { + if (i == 0) { + AKLOGI("=== Trace ==="); + continue; + } + AKLOGI("%s", strs[i]); + } + free(strs); +} +#else +#define ASSERT(success) +#define SHOW_STACK_TRACE +#endif + #else #define AKLOGE(fmt, ...) #define AKLOGI(fmt, ...) #define DUMP_RESULT(words, frequencies, maxWordCount, maxWordLength) #define DUMP_WORD(word, length) #define DUMP_WORD_INT(word, length) +#define ASSERT(success) +#define SHOW_STACK_TRACE #endif #ifdef FLAG_DO_PROFILE |