linux coredump文件分析举例

        GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具,本篇以C语言来调试。

前提条件

判断文件是否带有调试信息

要调试C/C++的程序,首先在编译时,要使用gdb调试程序,在使用gcc编译源代码时必须加上“-g”参数。保留调试信息,否则不能使用GDB进行调试。

if(CMAKE_BUILD_TYPE MATCHES Debug)
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -Wall -Wextra")     #set debug cmake choice 
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -g -Wall -Wextra") #
    message(STATUS "Debug mode:${CMAKE_C_FLAGS_DEBUG}")

elseif(CMAKE_BUILD_TYPE MATCHES Release)
    set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wall -O2 -Wextra")     #set reeeleae cmake choice  optimize level O2
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=c++11 -Wall -O2 -Wextra")   #  
    message(STATUS "Release mode:${CMAKE_C_FLAGS_RELEASE}")
else()

endif()
  • 检查方式1:

有一种情况,有一个编译好的二进制文件,你不确定是不是带有-g参数,带有GDB调试,这个时候你可以使用如下的命令验证:

  • 检查方式2:

有一种情况,有一个编译好的二进制文件,你不确定是不是带有-g参数,带有GDB调试,这个时候你可以使用如下的命令验证:

readelf -S hello|grep debug

        gdb启动程序后就可以按照其命令进行调试,与MCU的单步运行、查看变量值等原理相同,只不过gdb需要通过输入调试命令进行调试,调试命令参考,常用如下

GDB调试-CSDN博客

coredump文件生成配置

Core Dump:Core的意思是内存,Dump的意思是扔出来,堆出来(段错误)。开发和使用Unix程序时,有时程序莫名其妙的down了,却没有任何的提示(有时候会提示core dumped),这时候可以查看一下有没有形如core.进程号的文件生成,这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考,能够很大程序帮助我们定位问题。

  1. coredump文件大小设置

查看方式:

sudo ulimit -c

设置方式

sudo ulimit -c unlimited
  1. 更改core dump生成路径

因为core dump默认会生成在程序的工作目录,但是有些程序存在切换目录的情况,导致core dump生成的路径没有规律

所以最好是自己建立一个文件夹,存放生成的core文件

sudo mkdir -p /data/coredump

3、设置core dump生成文件格式

为方便分辨coredump文件的来源及时间,需要多coredump的文件格式进行设置

sudo sh -c "echo '/data/coredump/core_$(date +%Y-%m-%d_%H-%M-%S)-%p.dump' > /proc/sys/kernel/core_pattern"

总设置脚本如下

#!/bin/bash

COREDUMP_DIR="/data/coredump"
# check dir existed
if [ ! -d "$COREDUMP_DIR" ]; then
  mkdir -p "$COREDUMP_DIR"
  echo "Folder $COREDUMP_DIR created."
else
  echo "Folder $COREDUMP_DIR already exists."
fi

ulimit -c unlimited
ulimit -c
sh -c "echo '/data/coredump/core_$(date +%Y-%m-%d_%H-%M-%S)-%p.dump' > /proc/sys/kernel/core_pattern"

coredump文件调试确定原因

  • 方式1:gdb执行程序+coredump文件
sudo gdb hello /data/coredump/core_2023-11-07_05-46-45-9021.dump

输入bt查看函数的调用的栈帧和层级关系,发现main.c 61行出现问题,取地址错误

  • 方式2:gdb执行程序后再执行coredump文件
sudo gdb hello

core-file /data/coredump/core_2023-11-07_05-46-45-9021.dump

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
了解,可以为您提供一些关于Linux core dump文件分析的信息。首先,core dump文件是在程序崩溃或异常终止时生成的,它包含了程序崩溃时的内存映像和其他相关信息。分析core dump文件可以帮助我们定位程序崩溃的原因。 在Linux中,您可以使用以下工具来分析core dump文件: 1. GDB (GNU调试器): GDB是一个功能强大的调试器,可以用于分析core dump文件。您可以使用以下命令来加载core dump文件并进行分析: ``` gdb <可执行文件> <core dump文件> ``` 这将启动GDB并加载core dump文件。您可以使用GDB的各种命令来查看内存状态、寄存器值等,以帮助定位问题。 2. Crash: Crash是一个用于分析core dump文件的命令行工具,它提供了一些有用的命令和脚本来帮助您分析崩溃。您可以使用以下命令来使用crash工具: ``` crash <vmlinux> <core dump文件> ``` 其中,`vmlinux` 是内核符号文件,您可以在`/usr/lib/debug/boot`目录下找到。 3. SystemTap: SystemTap是一个功能强大的系统跟踪工具,可以用于分析各种系统问题,包括core dump文件。您可以编写SystemTap脚本来分析core dump文件中的各种信息。例如,您可以编写一个脚本来检查程序崩溃时的堆栈跟踪信息。 这些工具都有很多功能和选项,可以根据您的具体需求进行深入的分析。请注意,对于大型和复杂的core dump文件分析可能需要一些时间和经验。 希望这些信息对您有所帮助!如果您有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值