[MTK] 如何在android native code 打callstack

2020-10-13

阅读:2042

[DESCRIPTION]

分析native代码流程相关问题时可以用如下方式打出调用栈,适用于Android P及以上

[SOLUTION]

三个步骤

1.找到你需要添加callstack的源代码所在的Android.bp文件

frameworks/av/media/libmedia/Android.bp

2.在Android.bp文件中找到你需要添加callstack的源文件所对应的cc_library name,再在cc_library下面找到"header_libs"和"shared_libs" ,分别添加如下两行代码

在header_libs下面添加"libutils_headers",

在shared_libs下面添加"libutilscallstack",

3.在你需要添加callstack的源文件中引入CallStack的头文件,并在相应代码处添加log即可#include

@@ -378,6 +379,7 @@ status_t MediaPlayer::stop()

status_t MediaPlayer::pause()

{

ALOGV("pause");

+ CallStack stack("pause");

下面以在MediaPlayer.cpp代码的pause()方法和isPlaying()中加callstack为例来做说明,以下内容是git diff文件media/libmedia/Android.bp | 2 ++

media/libmedia/mediaplayer.cpp | 3 +++

2 files changed, 5 insertions(+)

mode change 100644 => 100755 media/libmedia/mediaplayer.cpp

diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp

index 1d335901c5..c8230645e3 100644

--- a/media/libmedia/Android.bp

+++ b/media/libmedia/Android.bp

@@ -270,6 +270,7 @@ cc_library {

header_libs: [

"libstagefright_headers",

"media_ndk_headers",

+ "libutils_headers",

],

export_header_lib_headers: [

@@ -283,6 +284,7 @@ cc_library {

"libcutils",

"libprocessgroup",

"libutils",

+ "libutilscallstack",

"libbinder",

"libsonivox",

"libandroidicu",

diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp

old mode 100644

new mode 100755

index 6767bba75b..72d65e9564

--- a/media/libmedia/mediaplayer.cpp

+++ b/media/libmedia/mediaplayer.cpp

@@ -45,6 +45,7 @@

#include

#include

+#include

namespace android {

@@ -378,6 +379,7 @@ status_t MediaPlayer::stop()

status_t MediaPlayer::pause()

{

ALOGV("pause");

+ CallStack stack("pause");

Mutex::Autolock _l(mLock);

if (mCurrentState & (MEDIA_PLAYER_PAUSED|MEDIA_PLAYER_PLAYBACK_COMPLETE))

return NO_ERROR;

@@ -401,6 +403,7 @@ bool MediaPlayer::isPlaying()

bool temp = false;

mPlayer->isPlaying(&temp);

ALOGV("isPlaying: %d", temp);

+ CallStack stack("isPlaying");

if ((mCurrentState & MEDIA_PLAYER_STARTED) && ! temp) {

ALOGE("internal/external state mismatch corrected");

mCurrentState = MEDIA_PLAYER_PAUSED;

--

赞赏

微信打赏

支付宝打赏

android c callstack,[MTK] 如何在android native code 打callstack相关推荐

  1. android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果

    如何在Android应用层中制作一个LED指示灯效果 发布时间:2020-12-08 16:12:59 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关如何在Android应用层中 ...

  2. android 动态修改菜单,如何在Android的“选项”菜单上更改MenuItem?

    如何在Android的"选项"菜单上更改MenuItem? 我的Activity上有一个选项菜单,带有mymenu.xml"开始". 选择此3000128611 ...

  3. android打电话的intent,如何在Android中使用intent打电话?

    如何在Android中使用intent打电话? 我正在使用以下代码在Android中进行调用,但它给了我安全例外,请帮忙. posted_by = "111-333-222-4"; ...

  4. android studio创建md,如何在Android Studio中设置*md文件打开方式

    最近在Android Studio中写一些Demo的时候,会顺便在里面创建一个.md文件用来进行Demo笔记的书写.然而Android Studio不带有markdown预览功能,所以我就琢磨如何在A ...

  5. android 4.4 flac,如何在Android中将音频原始转换为FLAC

    我使用audioRecord类录制音频.现在我想将音频原始文件转换为* flac格式.我转换*原始文件为WAV下一方式:如何在Android中将音频原始转换为FLAC private void cop ...

  6. Android清空Fragment缓存,如何在Android中清除Fragment Backstack

    如何在Android中清除Fragment Backstack 您好如何清除片段回堆栈正在使用以下逻辑,它不起作用... for(int i = 0; i < mFragmentManager. ...

  7. android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏

    最近人们喜欢在手机上玩游戏. 除了一些手机游戏(Android H游戏)之外安卓才可以玩的h,越来越多的朋友开始寻找Android手机游戏. 但是,有些人已经搜索了很长时间,还没有找到合适的游戏来玩. ...

  8. android 禁用通知栏_如何在Android上禁用通知

    android 禁用通知栏 Notifications are great, and Android's notification system is arguably the best out th ...

  9. android 平台上,AndroidAPP如何在Android平台上架?

    AndroidAPP如何在Android平台上架?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! AndroidAPP如 ...

  10. android指定日期闹钟,如何在android中设置特定日期的闹钟?

    嗨我需要使用时间选择器来设置特定日期的闹钟.当我给出静态输入时,闹钟设置不正确并响铃. 例如:我给静态输入(与日期,月份和年份),但它不振铃.这是我的代码.如何在android中设置特定日期的闹钟? ...

最新文章

  1. Feign实现服务调用
  2. 东华大学java_东华大学2020秋《Java程序设计》期末大作业
  3. 记录mysql客户端所有的操作
  4. 好习惯!pandas 8 个常用的 index 设置
  5. 7000更换控制器电源步骤_开关电源控制环路(初级篇:上)
  6. 交流信号叠加直流偏置_示波器助您更好地测量直流电源轫上的纹波噪声
  7. php7.0和5.6哪个好,PHP7.0与PHP5.6下Laravel博客的应用性能对比介绍
  8. curses.h: No such file or directory
  9. C/C++编程:字符串拼接
  10. NET 模拟Htpp请求
  11. 按步搭建简单IoT微服务(2)
  12. html页面国际化之谷歌翻译js实践,支持通过判断浏览器语言自动将中文翻译成英文
  13. 计算机技术与应用论文,计算机应用技术论文
  14. 关于Java中封装和get/set方法的作用
  15. 2019年嵌入式行业有哪些就业形势
  16. vue 调用webservice_用C#通过反射实现动态调用WebService 告别Web引用(转载)
  17. 网络报文中的checksum是做什么的?ChatGPT如是说
  18. 200条装修小常识(2)
  19. 写5个数学建模的经典模型案例和代码
  20. 谷歌开发者:看可口可乐公司是怎么玩转 TensorFlow 的?

热门文章

  1. 以下数据库收录外文文献全文的有_除了SCIHUB,这十大外文文献下载数据库也应该一试!...
  2. 20210219 plecs为不同的PWM 配置不同的死区时间
  3. macOS完整项目源码之macOS动态壁纸创建工具(教程含源码)
  4. java毕业设计汽车零件厂绩效管理mybatis+源码+调试部署+系统+数据库+lw
  5. 《2021爱分析·中国RPA应用趋势报告》正式发布
  6. 运筹学_单纯形法_week3
  7. 在word中如何设置稿纸和字帖?学会帮你省下字帖钱哟!
  8. 用户调研的操作步骤与过程模板
  9. 工作量统计系统 python_软件测试工作量统计新方法
  10. 计算机共享修复方法,打印机无法共享怎么办,教您修复打印机共享问题