android hal層 c 堆疊列印方法
阿新 • • 發佈:2018-12-31
比如要追蹤 hardware/qcom/audio/hal/audio_hw.c 中adev_set_mode() 函式的函式堆疊呼叫關係
實際原理就是利用c++ callstack 庫,重新編譯成c庫後使用即可.
1. 在hardware/qcom/audio/hal/ 下新增 callstack.cpp 和 callstack.h檔案 callstack.cpp 內容:
#include <utils/CallStack.h> extern "C" void dumping_callstack(void); void dumping_callstack(void) { android::CallStack cs("Jamie"); }
callstack.h內容:
void dumping_callstack(void);
2. Android.mk 加入原始檔 和 libutils 庫, 如下:安卓 hal層 C 檔案中加除錯堆疊
3. Audio_hw.c 中包含標頭檔案 : #include “callstack.h”
4. Adev_set_mode 中呼叫 dumping_callstack()
編譯so
執行後列印堆疊如下:
再使用addr2line 解析堆疊,即可查清呼叫關係