文章目录
问题
无人船项目,采集水质数据,上传到云服务器。该功能由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