android c callstack,[MTK] 如何在android native code 打callstack
[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相关推荐
- android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果
如何在Android应用层中制作一个LED指示灯效果 发布时间:2020-12-08 16:12:59 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关如何在Android应用层中 ...
- android 动态修改菜单,如何在Android的“选项”菜单上更改MenuItem?
如何在Android的"选项"菜单上更改MenuItem? 我的Activity上有一个选项菜单,带有mymenu.xml"开始". 选择此3000128611 ...
- android打电话的intent,如何在Android中使用intent打电话?
如何在Android中使用intent打电话? 我正在使用以下代码在Android中进行调用,但它给了我安全例外,请帮忙. posted_by = "111-333-222-4"; ...
- android studio创建md,如何在Android Studio中设置*md文件打开方式
最近在Android Studio中写一些Demo的时候,会顺便在里面创建一个.md文件用来进行Demo笔记的书写.然而Android Studio不带有markdown预览功能,所以我就琢磨如何在A ...
- android 4.4 flac,如何在Android中将音频原始转换为FLAC
我使用audioRecord类录制音频.现在我想将音频原始文件转换为* flac格式.我转换*原始文件为WAV下一方式:如何在Android中将音频原始转换为FLAC private void cop ...
- Android清空Fragment缓存,如何在Android中清除Fragment Backstack
如何在Android中清除Fragment Backstack 您好如何清除片段回堆栈正在使用以下逻辑,它不起作用... for(int i = 0; i < mFragmentManager. ...
- android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏
最近人们喜欢在手机上玩游戏. 除了一些手机游戏(Android H游戏)之外安卓才可以玩的h,越来越多的朋友开始寻找Android手机游戏. 但是,有些人已经搜索了很长时间,还没有找到合适的游戏来玩. ...
- android 禁用通知栏_如何在Android上禁用通知
android 禁用通知栏 Notifications are great, and Android's notification system is arguably the best out th ...
- android 平台上,AndroidAPP如何在Android平台上架?
AndroidAPP如何在Android平台上架?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! AndroidAPP如 ...
- android指定日期闹钟,如何在android中设置特定日期的闹钟?
嗨我需要使用时间选择器来设置特定日期的闹钟.当我给出静态输入时,闹钟设置不正确并响铃. 例如:我给静态输入(与日期,月份和年份),但它不振铃.这是我的代码.如何在android中设置特定日期的闹钟? ...
最新文章
- Feign实现服务调用
- 东华大学java_东华大学2020秋《Java程序设计》期末大作业
- 记录mysql客户端所有的操作
- 好习惯!pandas 8 个常用的 index 设置
- 7000更换控制器电源步骤_开关电源控制环路(初级篇:上)
- 交流信号叠加直流偏置_示波器助您更好地测量直流电源轫上的纹波噪声
- php7.0和5.6哪个好,PHP7.0与PHP5.6下Laravel博客的应用性能对比介绍
- curses.h: No such file or directory
- C/C++编程:字符串拼接
- NET 模拟Htpp请求
- 按步搭建简单IoT微服务(2)
- html页面国际化之谷歌翻译js实践,支持通过判断浏览器语言自动将中文翻译成英文
- 计算机技术与应用论文,计算机应用技术论文
- 关于Java中封装和get/set方法的作用
- 2019年嵌入式行业有哪些就业形势
- vue 调用webservice_用C#通过反射实现动态调用WebService 告别Web引用(转载)
- 网络报文中的checksum是做什么的?ChatGPT如是说
- 200条装修小常识(2)
- 写5个数学建模的经典模型案例和代码
- 谷歌开发者:看可口可乐公司是怎么玩转 TensorFlow 的?
热门文章
- 以下数据库收录外文文献全文的有_除了SCIHUB,这十大外文文献下载数据库也应该一试!...
- 20210219 plecs为不同的PWM 配置不同的死区时间
- macOS完整项目源码之macOS动态壁纸创建工具(教程含源码)
- java毕业设计汽车零件厂绩效管理mybatis+源码+调试部署+系统+数据库+lw
- 《2021爱分析·中国RPA应用趋势报告》正式发布
- 运筹学_单纯形法_week3
- 在word中如何设置稿纸和字帖?学会帮你省下字帖钱哟!
- 用户调研的操作步骤与过程模板
- 工作量统计系统 python_软件测试工作量统计新方法
- 计算机共享修复方法,打印机无法共享怎么办,教您修复打印机共享问题