嵌入式设备core dump空间不足,如何存储至远程机器?
解决嵌入式设备core dump远程存储的方法
方法1:通过GDB直接将core dump传输到远程服务器
如果已经用gdb attach到崩溃进程(或进程崩溃后用gdb加载进程),可利用generate-core-file的标准输出功能,结合管道和ssh直接将core dump发送到远程服务器,无需本地存储:
generate-core-file -o - | ssh user@remote-host "cat > /remote/path/core_dump_$(date +%Y%m%d_%H%M%S)"
- 确保嵌入式设备已安装ssh客户端,且配置无密码登录远程服务器(通过ssh密钥对),避免交互输入密码导致传输中断
/remote/path/替换为远程服务器的实际存储路径,文件名可按需添加进程ID、时间戳等标识
方法2:修改系统core dump规则,崩溃时自动发送到远程
通过修改内核core_pattern配置,让程序崩溃时直接将core dump通过管道传输到远程服务器,无需手动操作gdb:
- 开启core dump功能(需root权限):
ulimit -c unlimited
选择以下一种方式配置
core_pattern:- 基于ssh的方式:
echo '|ssh user@remote-host "cat > /remote/path/core-%e-%p-%t"' > /proc/sys/kernel/core_pattern其中
%e为进程名,%p为进程ID,%t为崩溃时间戳,会自动生成带标识的core文件名。- 基于netcat(nc)的方式:
先在远程服务器启动后台监听:
再在嵌入式设备配置nc -l -p 1234 > /remote/path/core_dump_$(date +%Y%m%d_%H%M%S) &core_pattern:echo '|nc remote-host-ip 1234' > /proc/sys/kernel/core_pattern
配置完成后,后续程序崩溃时,core dump会自动发送到远程服务器指定位置。
注意事项
- 嵌入式设备需确保预装ssh、nc工具,若未预装需交叉编译后部署
- 远程服务器需开放对应端口(如nc方式的1234端口),保证网络连通
- ssh方式务必配置密钥登录,否则崩溃时会因等待密码输入导致传输失败
内容的提问来源于stack exchange,提问作者shekhar singh
相关产品推荐
相关产品推荐

