android hal层 c 堆栈打印方法 ----CallStack,audio_hw.c

android hal层 c 堆栈打印方法

比如要追踪 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 解析堆栈,即可查清调用关系

addr2line 解析堆栈方法:https://mp.csdn.net/console/editor/html/104619393

实测:

wl@ubuntudhsb:~/13_6_new/HLOS/out/target/product/msm8909w$ git diff
diff --git a/frameworks/av/media/audioserver/Android.mk b/frameworks/av/media/audioserver/Android.mk
old mode 100644
new mode 100755
diff --git a/hardware/qcom/audio/msm8909/hal/Android.mk b/hardware/qcom/audio/msm8909/hal/Android.mk
old mode 100644
new mode 100755
index 6428abb..80d111c
--- a/hardware/qcom/audio/msm8909/hal/Android.mk
+++ b/hardware/qcom/audio/msm8909/hal/Android.mk
@@ -44,6 +44,8 @@ LOCAL_SRC_FILES := \
 
 LOCAL_SRC_FILES += audio_extn/audio_extn.c \
                    audio_extn/utils.c                                

+LOCAL_SRC_FILES += callstack.cpp
 
 LOCAL_C_INCLUDES += $(BOARD_KERNEL_HEADER_DIR)
 LOCAL_ADDITIONAL_DEPENDENCIES += $(BOARD_KERNEL_HEADER_DEPENDENCIES)
@@ -220,7 +222,8 @@ LOCAL_SHARED_LIBRARIES := \
        libaudioroute \
        libdl \
        libhardware \
-       libexpat
+       libexpat \

+       libutils
 
 LOCAL_C_INCLUDES += \
        external/tinyalsa/include \
diff --git a/hardware/qcom/audio/msm8909/hal/audio_hw.c b/hardware/qcom/audio/msm8909/hal/audio_hw.c
index 59cc19c..c829a13 100755
--- a/hardware/qcom/audio/msm8909/hal/audio_hw.c
+++ b/hardware/qcom/audio/msm8909/hal/audio_hw.c
@@ -55,6 +55,9 @@
 #include "sound/compress_params.h"
 #include "sound/asound.h"

+#include "callstack.h"


 #define COMPRESS_OFFLOAD_NUM_FRAGMENTS 4
 /* ToDo: Check and update a proper value in msec */
 #define COMPRESS_OFFLOAD_PLAYBACK_LATENCY 96
@@ -3594,6 +3597,7 @@ static int period_size_is_plausible_for_low_latency(int period_size)
 static int adev_open(const hw_module_t *module, const char *name,
                      hw_device_t **device)
 {

+       dumping_callstack();
     int i, ret;
 
     ALOGD("%s: enter", __func__);

wl@ubuntudhsb:~/13_6_new/HLOS/out/target/product/msm8909w$ cat  hardware/qcom/audio/msm8909/hal/callstack.cpp
//#include "callstack.h"
#include <utils/CallStack.h>
//#include <utils/Log.h>

extern "C" void dumping_callstack(void);
void dumping_callstack(void)
{
    android::CallStack cs("wuleiCallStack");
}

cat   hardware/qcom/audio/msm8909/hal/callstack.h 
void dumping_callstack(void);

好文:https://blog.csdn.net/u010116586/article/details/91486568

发布了56 篇原创文章 · 获赞 53 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_42082222/article/details/104619871
今日推荐