• 总结----调试问题套路(经验)


    ISP效果经验总结

    基于最近平台独立分析排查宏视另一个强光下,ISP偏红震荡问题,最后由李志确认方案的案例。

    结合平时解决问题的经验,个人认为在这种模块负责人没有时间情况下,有些时候问题负责人根据一定的套路可以尝试着解决。不合理的地方,还请多多指教。

    对ISP效果问题总结如下:

    1、收集:根据图像异常现象,打印常见ISP参数,观察参数的变化情况,这个过程要细心,不要放过任何蛛丝马迹。

    2、猜测:确定某个参数异常变化的时间点是否和图像异常的时间点吻合,如果吻合,那么这个参数应重点跟踪。(这个猜测有了依据)

    3、求证:阅读代码,梳理参数的变化过程,在异常的地方,临时调试性修正。查看结果,如果有效果,基本锁定了问题。如果没有效果,回到第1步。

    4、修复:请模块负责人确认问题,如果负责人认为确实有问题并给出修复方案,问题负责人还需从正常程序设计逻辑上监控修复方案的合理性。          如果负责人认为不是问题,应该解释临时修正有效果的原因。

    5、验证:合理性修复后,测试整个系统验证问题是否已修复。

    ps:细心收集、大胆猜测、小心求证。对这个模块经验不足的人切记臆想型猜测,然后使用试错的方法解决。

    rt-thread: vi动态模块线程被意外终止(内存异常)问题调试记录

    1、追踪确定动态模块异常终止的原因:

         动态模块创建的camera驱动线程的线程控制块出现异常,内核检测到后,将这个动态模块终止。

    2、调试内存异常的过程:

         a、在问题内存前后申请测试10K内存作为测试内存,问题依然存在,基本排除相邻内存越界。

         b、怀疑是内存意外被线程释放(线程删除),放开内核调试打印,问题又不出现了,结合之前添加打印,有时异常,有时异常,随机性比较大,所以更可能是内存踩踏。      c、把不相关模块都剔除,缩小范围,重新梳理异常的现象,每次name被修改的比较随机,但是同一个结构体内的type却每次都被修改为0。

         d、将该线程控制块每隔段时间打出来,基本可以缩小范围到函数DrvModule_Terminate_Task,只有在这个函数附近才会出现,屏蔽其中某些子函数可以恢复正常。但是不能确定是具体哪个子函数执行完才出现的,不能定位到具体那条语句。

         e、那么就和线程调度有关,执行某个子函数被切出去踩踏了,回来就异常,全部查看其子函数是否有任务切换,手动添加线程调度打印,发现确实有线程调度。

         f、阅读理解驱动框架drv_module,发现rt_drv_entry线程退出后,会调用DrvModule_Free,想起rtt开发手册有一条注:“在线程运行完成,自动结束的情况下,系统会自动删除线程,不需要再调用rt_thread_delete()函数接口”,但是手册没有说如果调用后会有什么后果。

         g、为了验证这个猜测,在rt_drv_entry阻塞住,不退出,经过多次测试,问题没有再复现。

         h、结合代码,确实是会在idle中将线程控制块中的type清零,name不会清零,所以才会出现c中描述的type每次都是0,name异常的比较随机。

         i、想起剑平、兴建原来也遇到thread_dele接口问题,他们通过修改rtt代码绕过,通过验证也是这个问题,于是纠正原来的修复方式。

    3、问题原理描述:

         如果有子线程主动退出成为僵尸线程,在任务切换时又先执行了idle线程,idle线程会把僵尸线程的控制块释放,然后再切回应用主线程时,主线程又调用了rt_thread_delete接口释放资源,这时rt_thread_delete接口里仍然会意外访问该线程控制块,导致该内存访问异常。

    4、解决方案:

         修复驱动框架,避免子线程主动退出后,资源被idle线程释放,然后主线程又调用rt_thread_delete访问资源。

    待续:

    对录像问题:

    对网络传输问题:

    对写卡问题:

    对系统崩溃问题:

  • 相关阅读:
    我的第九个java程序--spring和mybatis整合(java project)
    php 批量插入字段
    php 遍历静态html成文章列表
    把world转成html
    java 读取world的图片 并把图片路径存入数据库
    我的第八个java程序--读取word内容
    我的第7个java程序--把java web项目改为java project项目--mybatis
    我的第六个java程序 spring-bean
    学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用
    学习spring1--跟我一起学Spring 3(2)–开发环境配置
  • 原文地址:https://www.cnblogs.com/mic-chen/p/10735753.html
Copyright © 2020-2023  润新知