CORE DUMP生成调试
之前我调试嵌入式linux程序,一般是借助ucontext库,在发生段错误时,直接将错误函数打印出来。有同事建议我使用core dump,于是我今天在嵌入式板卡尝试了core文件的生成,但是也是几经波折,在网上查了很多资料,才成功生成core文件,所以总结如下:
如果程序段错误了,core文件没有生成,请做如下的尝试:
1. 检查ulimit,输入命令ulimit-c,看是否是0;建议修改成:ulimit -c unlimited
2. 检查kernel选项,CONFIG_ELF_CORE必须要打开。这个选项应该在menu config的general里面;记不清了,可以用grep搜索一下你的config文件,看当前值是什么。
3. 修改/proc/sys/kernel/core_uses_pid;/proc/sys/kernel/core_pattern等文件;这时遇到权限问题,加sudo也不行。可以用下面的方式来解决问题:
sudo bash -c "echo "" >/proc/sys/kernel/core_uses_pid "
sudo bash -c "echo "/opt/app_driver/core-%e-%p-%t" >/proc/sys/kernel/core_pattern"
sudo bash -c "echo "" >/proc/sys/fs/suid_dumpable"
不要直接sudo 去echo,而是在bash之前加sudo。
原因网上有资料说是:
procfs中的条目由ad hoc代码管理。在/proc/sys下设置文件权限和所有权的代码(proc_sys_setattr)拒绝使用EPERM更改权限和所有权。
因此无法更改这些文件的权限或所有权,完全停止。这样的改变没有实现,因此root无效。
当您尝试以非root用户身份编写时,会收到权限错误。即使使用sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern,
您尝试以非root用户身份编写:sudo以root身份运行echo,但重定向发生在执行sudo的shell中,该shell没有提升权限。使用sudo bash -c '… >…',
重定向在bash实例中执行,该实例由sudo启动并以root身份运行,因此写入成功。
也可以用下面的方式来修改,实际上我就是这么成功修改的:
sudo sysctl -w kernel.core_pattern=/opt/app_driver/core-%e-%p
如此再运行程序,出现段错误,就能够在/opt/app_driver/ 目录下生成core文件
1.sudo gdb ./demoout core-xxx-855
2.输入bt,打印backtrace
3.x/128xw 0xb58cd4e8 来打印内存
CORE DUMP生成调试的更多相关文章
- linux core dump 生成和调试
core dump 某些信号的产生会导致产生core dump,包含了进程终止时的内存镜像.在某些时候这个core文件就非常的有用处,配合gdb或者lldb调试起来非常方便. 更详细的文档参考 Lin ...
- core dump gdb调试
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...
- 用core dump来调试程序段错误
有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来 ...
- linux (core dump)调试
转自 http://www.cnblogs.com/hazir/p/linxu_core_dump.html Linux Core Dump 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内 ...
- Linux环境崩溃生成core文件以及调试
Linux环境崩环境溃生成core文件以及调试 gdb结合coredump定位崩溃进程 Linux 使用core file文件快速定位程序崩溃代码行 http://www.cnblogs.com/ha ...
- 在Linux上利用core dump和GDB调试segfault
时常会遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能.以前介绍过使用strace进行系统调试和追踪<l ...
- linux下生成core dump文件方法及设置
linux下生成core dump文件方法及设置 from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...
- linux 平台core dump文件生成
1. 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump. root@hbg:/# ulimit -c0root@hbg:/# 2.使用ulimit -c ...
- 解决linux下不生成core dump文件
core dump的概念: A core dump is the recorded state of the working memory of a computer program at a spe ...
随机推荐
- 学习-spring data jpa
spring data jpa对照表 Keyword Sample JPQL snippet And findByLastnameAndFirstname - where x.lastname = ? ...
- jQuery的animate()方法做一个颜色的渐变
需求:在1秒内,由一个颜色变到另一个颜色,不是1秒后再变色. <!DOCTYPE html> <html lang="en"> <head> & ...
- MySQL实战45讲学习笔记:第十讲
一 .本节内容概要 前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的.但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引.也就是说,使用哪个索引是由MySQL ...
- 【领会要领】web前端-轻量级框架应用(jQuery基础)
作者 | Jeskson 来源 | 达达前端小酒馆 jquery的安装和语法,jquery的多种选择器,dom操作和jquery事件. jQuery框架,简介,优势,安装,语法,jQuery选择器,i ...
- [LeetCode] 909. Snakes and Ladders 蛇梯棋
On an N x N board, the numbers from 1 to N*Nare written boustrophedonically starting from the bottom ...
- STM32调试,发现HAL_Init();之后无法调试,甚至无法让程序停下来
症状 最近开始学习STM32Cube,发现新建工程后无法正常调试,过了HAL_Init();之后就无法继续调试了. 无法进行让程序暂停以及停止等操作.并在输出窗口不断刷出 ERROR: Can not ...
- 深入学习 esp8266 wifimanager源码解析(打造专属自己的web配网)
QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 废话少说,本篇博文的目的就是深入学习 WifiManager 这个gi ...
- 【07月16日】A股滚动市净率PB历史新低排名
2010年01月01日 到 2019年07月16日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年07月16日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...
- postman使用的时候注意的坑
https://cloud.tencent.com/developer/article/1341037
- server 2012 r2 配置
filezilla的问题还是让人摸不着头脑,配置和别的机器上一样就是报STL权限错误,最后换了个端口就连上了. 服务器,填远端IP,被动模式打开,生成一个证书,被动模式的商品一定要在入站规则里 客户端 ...