普法安利一个调试debug小技巧

news/2024/7/21 11:11:43 标签: harmonyos, 华为, debug, mesa, gpu

debug_0">        普法安利一个调试debug小技巧



引言

  博客沉寂很久,肯定不是干坏事被抓吃公交粮食去了!而是最近忙着给OpenHarmony鸿蒙适配GPU渲染加速。尼玛,其中的各种坑啊,填了一个又一个,其中最最拖延了开发进度的事情就是给鸿蒙适配我司的GPU的时候,无法使用鸿蒙自身的hilog调试!不能查看调试相关打印信息,你说这个还能继续下去吗。辛亏最最后想到了一种间接的调试小技巧,通过函数回调OpenHarmony鸿蒙进行相关打印。

也许读者会说,一个打印调试信息的东东也能拿出来分享,真的朋友那我只能说你是没有遇到过这种情况:
1.当你的应用尝试使用写文件保存日志的时候,系统提示你没有权限
2.当你的Native C/C++应用可以使用GPU GL完美运行,而App应用却一直不能OK的时候
3,当你的第三方库使用的是gcc,而OpenHarmony使用的是clang才能使用hilog的时候
你就会体会到我下面要说的调试技巧有多么重要了。




一.万能调试技巧

  当你在一个操作系统上移植第三方库时候,由于种种原因第三方库无法直接使用操作系统的debug接口,那么真的没有办法了吗,这里我提供一种方法就是通过函数回调操作系统的debug接口,做到围魏救赵,曲线救国的目的。这里简单的描述下具体步骤:

  • 第三方库添加一个回调函数接口
typedef void (*fun_t)(char * format, ...);
void debugCallback (fun_t cb);
  • 调用者传入函数指针,供回调使用,如下
static void OS_HILOG_DEBUG(char *format, ...) {//回调函数
   va_list ap;
	char ptr[256]= {0};
	va_start(ap, format);
	vsprintf(ptr, format, ap);
	va_end(ap);
  LOGE("OS_HILOG_DEBUG %{public}s", ptr);
}
debugCallback(OS_HILOG_DEBUG);//引用第三方库,传入函数指针

  • 第三方库使用函数指针,回调操作系统打印
//头文件
typedef void (*fun_t)(char *format, ...);

extern  fun_t ohoscallback;

extern void
debugCallback(fun_t);


//实现
fun_t ohoscallback = NULL;
void debugCallback(fun_t cb){
   ohoscallback = cb;
}


//具体使用
if(ohoscallback != NULL){
   ohoscallback("%s", "Hello!");
}



好了,核心思想就是上面的几点了。




写在最后

  好了,打卡收工下班。今天的博客普法安利一个调试debug小技巧就到这里了。总之,青山不改绿水长流先到这里了。如果本博客对你有所帮助,麻烦关注或者点个赞,如果觉得很烂也可以踩一脚!谢谢各位了!!最后附上完整的相关改动点,希望能帮助到各位!


http://www.niftyadmin.cn/n/1567644.html

相关文章

普法Android.mk中的一些宏和Android.bp对应关系

普法Android.mk和Android.bp相关转换 Android源码编译系列博客: Android.bp你真的了解吗 Android.bp入门指南之Android.mk转换成Android.bp Android.bp入门指南之浅析Android.bp语法 Android.bp正确姿势添加宏控制编译指南 Android高版本P/Q/R源码编译指南 如何在线查看Android…

github服务器与电脑端互联

两种方式, 一、从远程库克隆 1、现在github上 create respoisity, 仓库名字就叫MyAndroidProject,(github上面的仓库是可以删除的,又上角setting键拉到最后就是)。 建好仓库,shell命令行进入Android项目目录&#xf…

获取手机存储信息

搜索获取手机存储信息,网上给出的多是用如下方式 File dir Environment.getExternalStorageDirectory();//Gets the Android data directoryString path dir.getPath();StatFs stat new StatFs(path);long blockSize stat.getAvailableBlocks(); //每个blo…

Android R窗口Window的requestlayout过程大揭秘

Android R窗口Window的requestlayout过程大揭秘 Android应用程序窗口设计系列博客: Android应用程序窗口设计之Window及WindowManager的创建 Android应用程序窗口设计之setContentView布局加载的实现 普法Android的Token前世今生以及在APP,AMS,WMS之间传递 Android应用程序窗口…

深究Activity启动模式

四种启动模式 * standard ,singleTop,singleTask,singleInstance * 1.standard 系统默认模式,每次启动一个Activity都会重新 创建一个新的实例,不管这个实例是否存在。被创建的是咧符合典型情况下的声明周期。 onCreate、onStart、onResume会被调用&a…

Android R系统aidl文件怎么对应的java文件找不到了?

Android R系统aidl文件怎么对应的java文件找不到了? 引言 Android系列博客沉寂很久了,很久了!不是我已经离开了江湖,而是最近忙着给OpenHarmony鸿蒙小系统,标准系统而给耽误了。这不趁着这两天有点空闲时间,准备调试下…

TextView自定义不同颜色

用到了SpannableString SpannableString spannableString new SpannableString("这是一个字符串");spannableString.setSpan(new ForegroundColorSpan(Color.BLACK), 0, 2 ,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv_person.setText(spannableString);

Context上下文

Context |–ContetxtWrapper getBaseContext() |–|–Application getApplication getApplicationContext 两个方法获取的结果内存地址相同,可保存全局单例变量Z(用户名密码) |–|–Activity