当前位置: 首页 > news >正文

Android15查看函数调用关系

Android15 Camera3中打印函数调用栈

1.使用CallStack跟踪函数调用

修改涉及三个内容:

  • Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。
  • 代码中包含CallStack的头文件。
  • 代码中调用CallStack接口,打印函数调用栈。

例子:查看Camera3Device::waitUntilStateThenRelock调用链路

1.Camera3Device.cpp中包含utils/CallStack.h头文件

diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index bb54f25..9f30160 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -74,6 +74,7 @@
 #include <algorithm>
 #include <optional>
 #include <tuple>
+#include <utils/CallStack.h>

 using namespace android::camera3;
 using namespace android::camera3::SessionConfigurationUtils;

2.Camera3Device::waitUntilStateThenRelock中打印调用栈

@@ -1654,32 +1661,59 @@ status_t Camera3Device::waitUntilStateThenRelock(bool active, nsecs_t timeout,
             mRequestThread->signalPipelineDrain(streamIds);
             signalPipelineDrain = true;
         }
         mRequestBufferSM.onWaitUntilIdle();
     }

+    {
+        android::String8 backtrace;
+        android::CallStack cs;
+        cs.update();
+        backtrace = cs.toString();
+        ALOGD("chenhy-trace:%s", backtrace.c_str());
+    }
+
     bool stateSeen = false;
     nsecs_t startTime = systemTime();
     do {
         if (mStatus == STATUS_ERROR) {
             // Device in error state. Return right away.

3.Camera3Device.cpp编译时链接libutilscallstack.so

diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index a74b6d6..b58c535 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -233,6 +233,10 @@ cc_library {
         "-Werror",
         "-Wno-ignored-qualifiers",
     ],
+
+    shared_libs: [
+        "libutilscallstack",
+    ],
 }

 cc_library_static {

4.效果

Android15 Frameworks/Native中打印函数调用栈

相关文章:

  • 使用string和string_view(二)——数值转换、std::string_view和非标准字符串
  • 华为、浪潮、华三链路聚合概述
  • 蓝桥杯 第十二天 819 递增序列
  • dubbo自定义扩展
  • Redis常见面试问题汇总
  • 【deepseek 学c++】weakptr引用场景
  • HBase在Hadoop平台上的安装和配置
  • Blender多边形填充问题
  • 00.【Linux系统编程】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)
  • Qt弹出新窗口并关闭(一个按钮)
  • Leetcode 四数之和
  • IEEE PDF Xpress校验出现 :字体无法嵌入问题以及pdf版本问题
  • docker中安装 python
  • Go 语言规范学习(3)
  • 5.0 WPF的基础介绍1-Grid,Stack,button
  • 同级目录下的两个文件怎么import
  • ngx_http_core_main_conf_t
  • DeepSeek-R1 模型现已在 AWS 平台上正式上线
  • SSE SseEmitter.completeWithError(e) 触发的处理逻辑
  • 使用 PowerShell 脚本 + FFmpeg 在 Windows 系统中批量计算 MP4视频 文件的总时长
  • 有没有免费网站制作/百度网站排名优化
  • 椒江网站建设578做网站/seow
  • 濉溪建设投资网站/重庆店铺整站优化
  • 大连网站建设 领超最好/个人怎么建立网站
  • 上海移动官网网站建设/有什么功能
  • 动态网站建设实训收获/国内新闻最新5条