印刷呼び出し元スタックは、プログラムを分析し、呼び出し元スタックをより簡単に見つけるのに役立つ場合があります。
次のようにコードを書くことができます。
Java:
例外 e = 新しい例外();
Log.e(TAG,"xxx",e);
C++ ファイル:
#include < utils/Callstack.h>
android::CallStack stack;
stack.update(1,30);
stacn.dump("xxx");
その後、関数の呼び出し元スタックをAndroidのメインログファイルで確認できます。
C ファイル:
#include < コルク栓抜き/backtrace.h>
#define MAX_DEPTH 31
#define MAX_BACKTRACE_LINE_LENGTH 800
静的backtrace_frame_t mStack[MAX_DEPTH];
静的size_t mCount;
void csupdate(int32_t ignoreDepth, int32_t maxDepth) {
if (最大深度 > MAX_DEPTH) {
maxDepth = MAX_DEPTH;
}
ssize_tカウント = unwind_backtrace(mStack, ignoreDepth + 1, maxDepth);
mCount = カウント > 0 ?カウント : 0;
}
void csdump(const char* プレフィックス)\
{
size_t i = 0;
backtrace_symbol_t記号[MAX_DEPTH];
get_backtrace_symbols(mStack, mCount, symbols);
for (i = 0; i < mCount; i++) {
文字行[MAX_BACKTRACE_LINE_LENGTH];
format_backtrace_line(i, &mStack[i], &symbols[i],
行、MAX_BACKTRACE_LINE_LENGTH);
ALOGE("%s%s", 接頭辞, 行);
}
free_backtrace_symbols(シンボル、mCount);
}
void myFunc()
{
csupdate(1, 30);
csdump("myprefix");
}
Android.mk 年には、以下のようにlibcorkscrewを追加します
LOCAL_SHARED_LIBRARIES := libxxx libyyy libcorkscrew