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-

  GDB -> bt情况:

(gdb) bt
# _MAINAPP_InitSysApp (dTotalApp=<optimized out>) at main_app_initflow.c:
# MAINAPP_InitFlow (param=<optimized out>) at main_app_initflow.c:
# 0x004f17e8 in MAINAPP_MainRoutine (pParam=<optimized out>) at main_app/main_app.c:
# 0x004f5f68 in thread_thread_handler (argp=0x8e6fd0) at gl_task.c:
# 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[]={};//内存越界 memset(&tmp_str, , *sizeof(char));
MID_TVFE_GetVersionInfo(MID_TVFE_CusSWVer, tmp_str, sizeof(tmp_str));//越界位置
printf("[Customer SW Ver.]:%s\n",tmp_str); memset(&tmp_str, , *sizeof(char));
MID_TVFE_GetVersionInfo(MID_TVFE_FlashVer, tmp_str, sizeof(tmp_str));
printf("[Flash Type]:%s\n",tmp_str); memset(&tmp_str, , *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

  

RDA CoreDump 实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. Linux下程序崩溃,ulimit,coredump,gdbserver

    操作系统:Ubuntu10.04 前言:    在程序崩溃后,如何快速定位问题.    以下方法适用于开发调试阶段,不太适用成品.    本文着眼于嵌入式,PC方面更简单.    核心:gdbserv ...

  3. (转)使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

    使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解   本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创 ...

  4. Oracle 单实例 Relink Binary Options 说明

    一.引入问题 帮朋友在CentOS上安装一个10g的Oracle,结果朋友的CentOS版本是6.2的版本,最新的一个版本,不过Linux上基本都差不多,所以按照以前的步骤,迅速的操作起来,结果遇到N ...

  5. 多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列

    多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题,  程序崩了.场景是这样的:某全局配置参数保存在一 ...

  6. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. EntityFramework Core 1.1是如何创建DbContext实例的呢?

    前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起. 显式创建DbContext实例 通过带OnConfiguri ...

  9. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

随机推荐

  1. node函数assert()详解

    assert.ok() 的别名. const assert = require('assert'); assert(true); // OK assert(1); // OK assert(false ...

  2. ruby cucumber安装

    创建rails工程

  3. 记一次C++编程引用obj文件作为静态库文件

    简介 常用静态库文件的名字一般是 ***.lib ,例如 nisyscfg.lib 就是一个静态库文件,但是一个例程居然是引用 **.obj 文件作为静态库,有点非常规啊. 这是一个NI488.2 的 ...

  4. 51中xdata,idata,data,pdata的区别

    51系列中data,idata,xdata,pdata的区别 data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. idata: 固定指前面0 ...

  5. Springboot开启事务

    参考资料: https://blog.csdn.net/message_lx/article/details/77584847

  6. es6(var,let,const,set,map,Array.from())

    1.变量声明--var,const,let 1.1 var - (全局作用域,局部作用域)会有变量提升 //第一个小例子 <script> var num = 123; function ...

  7. Spring AOP配置简单记录(注解及xml配置方式)

    在了解spring aop中的关键字(如:连接点(JoinPoint).切入点(PointCut).切面(Aspact).织入(Weaving).通知(Advice).目标(Target)等)后进行了 ...

  8. C++标准模板库 ——堆栈使用

    include using namespace std; stack S; S.push(i); S.pop(); int x = S.top(); ```

  9. 易接SDK ios9以上无法弹出充值界面的一种情况

    充值需要用到http请求: 打开info.plist, 在app tansport security  setting 这个项 ,  加入  NSAllowsArbitraryLoads YES

  10. http post提交数组

    方式一:@RequestParam方式 服务提供方用@RequestParam注解接收参数,参数类型为long数组: @ApiOperation(value = "***", ta ...