linux通信程序debug

在无人船水质监测项目中,一个运行在Ubuntu上的通信程序在船行驶时出现崩溃。通过审查代码、C++ try catch及分析core dump进行故障排查。尝试在不同环境验证try catch方法,发现其在Ubuntu GCC 7.5下无效。最终,分析core文件成为更有效的调试手段。
摘要由CSDN通过智能技术生成

问题

无人船项目,采集水质数据,上传到云服务器。该功能由ubuntu系统的一个通信程序实现。调试过程中发现在巡航船行驶过程中,会发生通信程序死掉的问题。这种情况是必现的。
开发环境如下,cmake管理工程,C语言开发,使用了modbus,mosquitto库。
程序中使用了log,每5s flush一次;

探索

程序死掉,log系统是无法记录的。大体可以从如下角度入手:1)审查代码,分析可疑代码并验证;2)C++ try catch捕获异常,采用分段策略缩小审查范围;3)添加调试信息,使用core来分析;4)系统日志; 5)不解决策略:添加监视手段,检测到死掉再重启一个;

方法1)审查代码

未发现异常

方法2)try catch(…)

发现问题复现时,未进入catch语句。(采用的是C语言,文件以cpp命名)写法如下

	try{
		if (t_now >= t_battery_next && (battery_read_count = read_battery_data(p_battery_buf, &battery_buf[BATTERY_BUF_SIZE], battery_ctx)) > 0){
			publish_battery_data(&batter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值