博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RDA CoreDump 实例
阅读量:6680 次
发布时间:2019-06-25

本文共 2116 字,大约阅读时间需要 7 分钟。

  UMF进程的Coredump问题追踪:  通河code开机DUMP问题

现象:

  开机Dump,原因:_MAINAPP_SW_Init()调用了Factory_Ver_Debug()内存溢出。

分析流程:

  1、make menuconfig配置coredump导出功能

    

  2、程序Dump后会在U盘自动产生120MB大小的coredump file(core-b20171111_1153-s4287-MainAppxxx),这个文件就是Debug的GDB文件,用于分析堆栈线程。

    

  3、需要将coredump file与umf.gdb进程文件放在一起运行:

mipsel-unknown-linux-uclibc-gdb ./aps/application/radisson/atv_project/umf.gdb \ ./aps/application/radisson/atv_project/core-b20171111_0933-s4287-MainApp\ Thread-1356998404

  GDB -> bt情况:

(gdb) bt#0  _MAINAPP_InitSysApp (dTotalApp=
) at main_app_initflow.c:1472#1 MAINAPP_InitFlow (param=
) at main_app_initflow.c:2328#2 0x004f17e8 in MAINAPP_MainRoutine (pParam=
) at main_app/main_app.c:420#3 0x004f5f68 in thread_thread_handler (argp=0x8e6fd0) at gl_task.c:192#4 0x005666a4 in ?? ()

  bt可以标注出线程调用关系及挂机位置,需要注意的是,有时内存越界的挂机不会立即表现出来,但某一个线程栈导致的问题,一般是不会影响到其它线程。所以第一可以判断出问题线程,第二如果内存溢出不能导致线程立即挂起的话,应该在GDB标记挂起的堆栈层次中向前查找问题原因。

  4、详细如下:

project.h#define CUSTOMER_SOFTWARE_VERSON  "TONGHE_C031FH_1366x768_201711111345"    #define CONFIG_SUPER_BIN_FILENAME  "RR8501_VIP.bin"    #define CONFIG_SUPER_BIN_FILENAME_ALL  "RR8501_ALL.bin"    #define BUILD_TIME  "20171111_134524"    #define CONFIG_MODEL_BOARD_TYPE_DC#define CONFIG_BIN_FILENAME  "RR8501_C031FH.bin"    #define CONFIG_DEFAULT_PWM_REG_MIN  0    #define CONFIG_DEFAULT_PWM_REG_MAX  522

  注意客户版本号定义的字串,在显示客户信息的API ,调用Factory_Ver_Debug()都有引起coreDump。

void Factory_Ver_Debug(void){    char tmp_str[25]={
0};//内存越界 memset(&tmp_str, 0, 25*sizeof(char)); MID_TVFE_GetVersionInfo(MID_TVFE_CusSWVer, tmp_str, sizeof(tmp_str));//越界位置 printf("[Customer SW Ver.]:%s\n",tmp_str); memset(&tmp_str, 0, 25*sizeof(char)); MID_TVFE_GetVersionInfo(MID_TVFE_FlashVer, tmp_str, sizeof(tmp_str)); printf("[Flash Type]:%s\n",tmp_str); memset(&tmp_str, 0, 25*sizeof(char)); MID_TVFE_GetVersionInfo(MID_TVFE_OTAVer, tmp_str, sizeof(tmp_str)); printf("[OTA version]:%s\n",tmp_str); printf("===================================\n"); printf("End Version\n\n");}

  使用CoreDump时,要关掉GCC优化,即设置GCC 优化级别为0

  

 

转载地址:http://fanao.baihongyu.com/

你可能感兴趣的文章
C#编程之“串口通讯多次接收”
查看>>
【python 文件操作】python 文件操作
查看>>
线程相关
查看>>
【C语言】20-static和extern关键字2-对变量的作用
查看>>
详解JDBC驱动的四种类型
查看>>
第十一次作业
查看>>
Android 中Webview 自适应屏幕
查看>>
ubuntu 为rabbitmq安装web插件管理界面(为了远程查看rabbitmq) 分类...
查看>>
js面试题1
查看>>
阿铭每日一题 day 4 20180114
查看>>
转载:C#中的泛型
查看>>
1.4 注册系统的逻辑与结构
查看>>
NOIP模拟2017.6.11解题报告
查看>>
洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】
查看>>
Python-Django 视图层
查看>>
uC/OS-II中includes块
查看>>
公共DNS推荐及dns测速
查看>>
查询获取所有数据库名及数据库中表的集合、数据库连接字符串(类生成器,暂时支持mysql,sql server,后期有oracle再更新)...
查看>>
Scramble String
查看>>
Linux基础:CentOS安装python3.7
查看>>