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 ...
随机推荐
- Discarding Game CodeForces - 1250G(思维)
Discarding Game \[ Time Limit: 3000 ms\quad Memory Limit: 524288 kB \] 题意 一个人和一个电脑在玩游戏,游戏规则是 游戏有 \(n ...
- Eclipse:设置自动生成注释
一.设置自动生成 1.修改设置: 点击Window下的Preferences: 进入Java->Code Style->Code Templates的页面,选择Code下的New Java ...
- java常量池-字符串常量池、class常量池和运行时常量池
原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的内存分配中,经常听到很多关于常量 ...
- debian系统配置
使用腾讯docker源 sudo sed -i 's/deb.debian.org/mirrors.cloud.tencent.com/g' /etc/apt/sources.list sudo se ...
- 使用thanos管理Prometheus持久化数据
关于thanos的介绍可以参考这篇官方博客的翻译文档,本文不作部署操作介绍.下图是thanos的官方架构图,主要有5个组件: Query:可以近似看作是Prometheus的实现,用于采集其他组件的数 ...
- Centos 7.5 安装JDK
#wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com ...
- 前端学习:学习笔记(CSS部分)
前端学习:学习笔记(CSS部分) CSS的学习总结(图解) CSS的引入方式和书写规范 CSS的插入方式_内嵌样式 <!DOCTYPE html> <html> <hea ...
- Neo4j 第八篇:投射和过滤
投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...
- MP3文件信息修改
MP3文件信息 参考链接:https://www.jianshu.com/p/e368517ec7b9 总结: ID3V1在MP3文件后面;ID3V2在MP3文件前面;现在有些文件是V1的,有些文件是 ...
- Java中如何获取一个类中泛型的实际类型
本文链接:https://blog.csdn.net/kuuumo/article/details/83021158 _______________________________________ ...