码迷,mamicode.com
首页 > 其他好文 > 详细

RDA CoreDump 实例

时间:2017-11-11 16:01:53      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:printf   oar   board   reg   log   ima   技术分享   ffffff   ems   

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

  先强调一点,使用CoreDump是,要关掉GCC优化,即设置GCC 优化级别为0

现象:

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

分析流程:

  1、make menuconfig配置coredump导出功能

    技术分享

  2、程序挂了,会在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=<optimized out>) at main_app_initflow.c:1472
#1  MAINAPP_InitFlow (param=<optimized out>) at main_app_initflow.c:2328
#2  0x004f17e8 in MAINAPP_MainRoutine (pParam=<optimized out>) at main_app/main_app.c:420
#3  0x004f5f68 in thread_thread_handler (argp=0x8e6fd0) at gl_task.c:192
#4  0x005666a4 in ?? ()

  标注出线程调用关系及挂机位置,需要注意的是,有时内存越界的挂机不会立即表现出来,但某一个线程栈使用导致的问题一般是不会影响到其它线程。所以第一可以判断出问题线程,第二如果问题不能导致线程立即挂起的话,应该在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");
}

 

RDA CoreDump 实例

标签:printf   oar   board   reg   log   ima   技术分享   ffffff   ems   

原文地址:http://www.cnblogs.com/jiangzhaowei/p/7819142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!