Linux环境抓取程序异常退出(崩溃)的堆栈信息(core dump)

目录

一、文档说明

二、Linux环境下生成core文件

2.1.当前shell窗口临时配置

2.2.永久生效配置

三、堆栈信息(core dump)调试

3.1.通过生成的core文件调试

3.2.通过程序进程名称调试

3.3.通过程序进程PID调试


一、文档说明

Linux环境下程序进程发生异常(崩溃)而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息。通常存在以下三种调试程序异常退出(崩溃)的应用场景:

场景1:通过配置Linux环境程序进程发生异常(崩溃)退出时生成core文件,使用gdb命令对程序异常退出生成的core文件进行堆栈信息的调试。(适用于所有场景,推荐使用)

场景2:通过程序进程名称,直接使用gdb命令进行调试。(适用于命令行方式直接调试程序的场景)

场景3:通过程序进程的PID值,直接使用gdb命令进行调试。(适用于通过服务接口调用到程序进程,进行调试程序的场景)

二、Linux环境下生成core文件

2.1.当前shell窗口临时配置

# 查看生成core文件的开关是否开启

sudo ulimit -a

我们可以看到,第一行core文件大小为0,表示没有开启。

# 使用命令ulimit -c [kbytes]可以设置系统允许生成的core文件大小,生成core文件大小说明如下所示:

ulimit -c 0   —>不产生core文件

ulimit -c 100设置core  —>文件最大为100k

ulimit -c unlimited  —>不限制core文件大小

# 执行生成core文件大小(不限制大小)命令,然后查看core文件大小

#生成不限制大小的core文件
sudo ulimit -c unlimited
#查看配置的core文件大小
sudo ulimit -a

这样程序进程崩溃就可以生成core文件了,但是这种方法只能在当前shell中生效。(不建议使用)

2.2.永久生效配置

#  进入编辑模式,在profile文件中加入ulimit -c unlimited

sudo vim /etc/profile

# 使用source命令使配置文件文件马上生效

sudo source /etc/profile

#  进入编辑模式,在sysctl.conf配置文件中指定生成文件的路径和名字,在配置文件中添加如下两行内容:

sudo vim /etc/sysctl.conf

kernel.core_pattern=/swdata/core/core_%e_%p
kernel.core_uses_pid=0

# 在/swdata/下创建core目录,用sysctl -p /etc/sysctl.conf(如果此命令执行后不生效,则需要重启服务器后生效)使修改的配置马上生效

sudo mkdir -p /swdata/core
sudo sysctl -p /etc/sysctl.conf

备注:core_pattern的命名参数如下

%c 转储文件的大小上限

%e 所dump的文件名

%g 所dump的进程的实际组ID

%h 主机名

%p 所dump的进程PID

%s 导致本次coredump的信号

%t 转储时刻(由1970年1月1日起计的秒数)

%u 所dump进程的实际用户ID

# 验证core文件配置是否成功,执行验证core文件生成命令,可以看到/swdata/core下生成了一个core文件,说明已经设置成功。

sudo kill -s SIGSEGV $$
sudo ls /swdata/core

配置完成,接下来进程出问题就可以用core文件调试了。

三、堆栈信息(core dump)调试

3.1.通过生成的core文件调试

# 调用自己的程序发生崩溃时,同样会在/swdata/core/目录下生成一个core文件,命名格式为:core_[processName]_[processPid]

# 使用file命令可以查询到此core崩溃文件生成的对应程序

sudo file core_apiprocess_13275

# 使用gdb命令可以对崩溃堆栈文件,进行堆栈信息排查(若是服务器没有gdb命令,则需要首先安装gdb命令)

# 执行gdb [core崩溃文件生成的对应程序] [core文件],等待gdb命令运行停止后执行bt

sudo gdb /data/apiservice/app/api/x64-linux/apiprocess core_apiprocess_13275
#过程中需要等待gdb命令运行完成后输入bt
bt

等待崩溃堆栈信息输出完成后,即可查看程序崩溃的堆栈信息。

输入quit命令即可退出gdb命令调试。

3.2.通过程序进程名称调试

# 调用需要调试崩堆栈信息的程序(本次调试使用的apiToDocument程序)

# 使用gdb  [process]进行调试,等待gdb命令运行停止后执行r  [运行内容]

# 调用程序使其发生崩溃,此时gdb会有输出,等待gdb命令运行停止后执行bt

3.3.通过程序进程PID调试

# 查询需要调试崩溃堆栈信息程序的PID(本次调试使用的apiprocess程序)

sudo ps -e|grep apiprocess

# 使用gdb  --pid=[pid值]进行调试,等待gdb命令运行停止后执行c

# 调用自己的程序使其发生崩溃,此时gdb会有输出,等待gdb命令运行停止后执行bt

等待崩溃堆栈信息输出完成后,即可查看程序崩溃的堆栈信息,输入quit命令即可退出gdb命令调试。

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Windows 平台上,应用程序崩溃时可能会产生 Core Dump 文件,通常以 .dmp 后缀结尾。这个文件包含了应用程序崩溃时的内存状态,可以帮助开发者定位和解决问题。以下是处理 Windows 应用程序崩溃产生 Core Dump 的一些方法: 1. 启用 Windows Core Dump 在 Windows 上,默认情况下是不启用 Core Dump 的。使用以下命令可以启用 Core Dump: ``` reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f ``` 2. 使用 Visual Studio 调试 Core Dump Visual Studio 支持使用 Core Dump 进行调试。可以使用 Visual Studio 打开 Core Dump 文件,并分析崩溃的原因。具体的操作步骤可以参考 Microsoft 官方文档。 3. 使用 WinDbg 调试 Core Dump WinDbg 是一款微软开发的用于 Windows 平台上的调试器,支持分析 Core Dump 文件。可以使用 WinDbg 打开 Core Dump 文件,并分析崩溃的原因。具体的操作步骤可以参考微软官方文档。 4. 使用第三方工具分析 Core Dump 除了使用 Visual Studio 和 WinDbg,还有一些第三方工具可以用来分析 Core Dump 文件,比如 Process Explorer、GDB 等。这些工具都有各自的优缺点,开发者可以根据自己的需要选择合适的工具。 总的来说,处理 Windows 应用程序崩溃产生 Core Dump 的过程比较复杂,需要开发者具备一定的调试经验。建议在处理 Core Dump 之前先了解一下相关的调试工具和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值