开发环境
ubuntu22 + ros humble + c++11
程序奔溃后core文件存储设置
1. 确保系统允许生成core文件
首先,检查和设置系统的core文件生成限制:
检查当前core文件大小限制
使用以下命令检查当前core文件大小限制:
ulimit -c
如果输出为 0
,表示不允许生成core文件
设置core文件大小限制
使用以下命令临时设置core文件大小限制为无限制:
ulimit -c unlimited
要永久设置,可以将此命令添加到用户的shell配置文件中,例如 .bashrc
或 .bash_profile
:
echo "ulimit -c unlimited" >> ~/.bashrc
source ~/.bashrc
2. 检查和设置core文件生成路径
Core文件的生成路径可以通过 /proc/sys/kernel/core_pattern
文件进行配置。
查看当前core文件生成路径
使用以下命令查看当前的core文件生成路径:
cat /proc/sys/kernel/core_pattern
设置core文件生成路径
可以将core文件生成到当前目录或指定目录。使用以下命令设置:
sudo sysctl -w kernel.core_pattern=/tmp/core_%e.%p
上述命令会将core文件生成到 /tmp
目录,并命名为 core_<程序名>.<进程ID>
。要永久设置,可以将以下行添加到 /etc/sysctl.conf
文件中:
echo "kernel.core_pattern=/tmp/core_%e.%p" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 检查是否有写入权限
确保程序运行的用户对core文件生成的目录有写入权限。例如,如果core文件生成路径为 /tmp
,确保对该目录有写入权限。
4. 使程序崩溃
可以通过以下代码强制使一个C++程序崩溃,以便生成core文件
#include <csignal>
#include <cstdlib>int main() {raise(SIGSEGV); // 发送SIGSEGV信号,导致程序崩溃return 0;
}
编译并运行该程序:
g++ -o crash crash.cpp
./crash
5. 使用gdb调试core文件
生成core文件后,可以使用 gdb
进行调试:
gdb /path/to/program /path/to/core_file
通过这些步骤,您应该能够确保在程序崩溃时生成core文件。如果仍然没有生成core文件,请检查系统日志以获取更多信息
dmesg | grep core