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

        普法安利一个调试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!");
}

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




写在最后

经验分享 程序员 微信小程序 职场和发展