如何使用gdb分析c++ core

一、概述

使用c++开发程序时,经常会遇到运行中core的情况,如果是偶发的就更加难以定位,本文讲解如何使用gdb进行core位置的分析定位。

二、打开coredump文件生成

# 1. 支持产生coredump
# 查看当前设置
cat /etc/security/limits.conf|grep core
ulimit -c      # 如果是unlimited,说明设置成功
# 设置(最好加到业务启动命令里)
ulimit -c unlimited

# 2.控制core文件保存位置和文件名格式
# 查看目前使用的方式
cat /proc/sys/kernel/core_pattern
# 修改生成位置和命名规则(必须bash -c 'echo xxx'方式,不能通过vi修改)
sudo bash -c 'echo "/coredump/%e_%p_%t.core" > /proc/sys/kernel/core_pattern'
# 命名格式参数:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
# qnx系统下没有/proc/sys/kernel/core_pattern文件,需要用命令指定保存目录
dumper -d /coredump/

# 3.测试让程序产生一个coredump
kill -6 $pid
kill -11 $pid

三、使用gdb分析core

1、使用gdb分析coredump文件

gdb ./bin/ipc_server   ipc_server.core   # 必须使用与core时一样的bin/lib文件
(gdb) set args zmq 6000   # 指定运行时的参数
(gdb) bt          # backtrace显示当前调用堆栈
(gdb) q           # 退出gdb

2、使用gdb调试bin文件

gdb -q ./bin/ipc_server
(gdb) set args zmq 6000   # 指定运行时的参数
(gdb) r            # run运行程序直到遇到 结束或者遇到断点
(gdb) bt          # backtrace显示当前调用堆栈
(gdb) quit       # 退出gdb

 

参考:

https://cloud.tencent.com/developer/article/1428111?from=15425

欢迎关注下方“非著名资深码农“公众号进行交流~

发表评论

邮箱地址不会被公开。