使用gdb调试解决ROS进程崩溃

本文介绍了如何在Linux的ROS系统中处理程序异常,包括生成无限制大小的核心转储文件,修改core_pattern设置,以及如何使用gdb进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux系统中程序异常终止或崩溃会发生核心转储(Core Dump)。简单地说,ROS进程崩溃可以生成core文件,再利用gdb调试该core文件就可以获取ROS进程崩溃的详细信息。

1. 生成core文件

1.1 取消core文件生成大小限制

/etc/security/limits.conf文件中添加如下代码:

*               soft    core            unlimited
*               hard    core            unlimited

/etc/pam.d/common-session文件和/etc/pam.d/common-session-noninteractive文件中添加如下代码:

session	required	pam_limits.so

~/.bashrc文件中添加如下代码:

ulimit -c unlimited

执行ulimit -a命令检查core file size是否变为unlimited:

1.2 在ROS包中添加gdb调试信息

在待调试ROS包的CMakeLists.txt文件中添加如下代码:

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

2. 修改core文件的生成目录和文件名

修改/proc/sys/kernel/core_pattern中core文件的生成目录和文件名:

echo core | sudo tee /proc/sys/kernel/core_pattern

修改core文件的生成目录和文件名时可用的参数如下(例如,上述命令中的core可以修改为/cores/core_%e_%t):

参数内容
%e导致核心转储的进程对应的可执行文件名
%h发生核心转储的主机名
%p导致核心转储的进程对应的Pid
%s导致核心转储的Linux信号
%t发生核心转储的时间
%u导致核心转储的进程对应的Uid

当系统重新启动时,/proc/sys目录中的文件会重置为默认值。若要在系统重启后保持自定义的core_pattern设置,可以通过修改系统的启动脚本或者在启动系统时执行一个脚本来重新应用该设置。或是和我一样,需要用到gdb调试时重新执行上述命令。

3. 使用gdb调试core文件

编译ROS工作空间后,使用roslaunch执行待调试的ROS包,若ROS进程发生异常终止或崩溃,则会在$ROS_HOME下生成core文件,如未设置$ROS_HOME则默认在~/.ros目录下生成core文件。
此时,进入到ROS工作空间目录下,可以使用gdb调试core文件:

gdb ./devel/lib/<ROS包>/<ROS节点> ~/.ros/core

之后,在gdb调试中执行btwhere命令即可查看相关异常,或其他gdb调试的相关用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值