如何分析 core 文件

Core 产生的原因

  1. 内存访问越界
  2. 多线程程序使用了线程不安全的函数。
  3. 多线程读写的数据未加锁保护
  4. 非法指针
  5. 堆栈溢出

如何生成 Core

ulimit -c unlimited
echo "/xxx/xx/core-%e-%p-%s-%t" > /proc/sys/kernel/core_pattern

默认core文件生成在当前路径,可以修改路径
%p 出Core进程的PID
%u 出Core进程的UID
%s 造成Core的signal号
%t 出Core的时间,从1970-01-0100:00:00开始的秒数
%e 出Core进程对应的可执行文件名

如何分析 core

前提是编译的 debug 版本库
命令行输入

gdb 可执行文件 core文件
功能命令示例
查看堆栈信息bt
查看某一层的堆栈信息frame , ff 0 表示打印栈顶,f 1 表示打印栈的第二层, 此时可以打印这一层的局部变量,变量地址等,如 p 变量名
上移一层up
下移一层down
查看当前栈层的信息frame,f 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句info frame, info f, 会打印出更为详细的当前栈层的信息
打印当前函数的参数名及其值info args
打印出当前函数中所有局部变量及其值info locals
打印出当前的函数中的异常处理信息info catch
设置符号(库)文件搜索路径的前缀set solib-absolute-prefix /mnt/test/lib只能有一个,它与 set sysroot等价
设置符号(库)文件搜索路径set solib-search-path /mnt/test/lib可以有多个,用":"隔开
设置环境变量set env LD_LIBRARY_PATH /tmp

参考

core文件如何分析
Linux中用gdb 查看代码堆栈的信息
solib-absolute-prefix 和solib-search-path的区别
gdb 查找动态库方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Linux 中,当一个进程遇到致命错误时,它会生成一个 core 文件,也称为核心转储文件。这个文件包含了进程的内存映像、寄存器状态等信息,可以用于分析进程崩溃的原因。 下面是一些常见的分析 core 文件的方法: 1. gdb 调试器 gdb 是一个强大的命令行调试器,可以用来分析 core 文件。简单的做法是通过命令行运行 `gdb <可执行文件> <core 文件>`,然后使用 gdb 的命令来查看内存、寄存器、堆栈等信息。 2. objdump 工具 objdump 工具可以用来分析 ELF 格式的可执行文件core 文件。使用 `objdump -f <core 文件>` 命令可以查看 core 文件的基本信息,使用 `objdump -s <core 文件>` 命令可以查看 core 文件的内存映像。 3. readelf 工具 readelf 工具也可以用来分析 ELF 格式的可执行文件core 文件。使用 `readelf -a <core 文件>` 命令可以查看 core 文件的基本信息,使用 `readelf -x <section> <core 文件>` 命令可以查看特定节的内容。 4. addr2line 工具 addr2line 工具可以将内存地址转换为源代码行号。使用 `addr2line -e <可执行文件> <内存地址>` 命令可以查看特定内存地址对应的源代码行号。 以上是一些常见的分析 core 文件的方法,但是对于复杂的程序崩溃,仍然需要耐心分析。同时,还可以使用其他工具和技术,如 Valgrind、strace、perf 等,来进一步分析进程崩溃的原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值