From 5540acb6765d24ca0257a303beee84cfa139a49f Mon Sep 17 00:00:00 2001
From: Satoshi Kataoka <satok@google.com>
Date: Mon, 3 Sep 2012 18:35:32 +0900
Subject: [PATCH] Add backtrace tool

Change-Id: I2795bedf8d8fd545ae411e74b65770d520c715c4
---
 native/jni/src/defines.h | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index 9b530077ab..28661ab20a 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
-- 
GitLab