基于【Apollo】进程异常崩溃定位方法

本文描述了在Apollo平台上,当Dreamview模块异常关闭并重启的现象。通过查看Dreamview代码,发现模块开关定义,结合gdb分析core dump日志,定位到错误是由库版本不匹配引起。在Ubuntu/Linux/Android系统中,可以采用类似方法查找并分析core dump日志,以解决类似问题。
摘要由CSDN通过智能技术生成

现象

在dreamview里面,打开Navi_planning或者Planning模块的开关,开关运行一段时间后会自动关闭并重新开启。

定位过程

查看dreamview代码,模块开关定义在modules/dreamview/conf/hmi.conf

modules {
  key: "navigation_planning"
  value: {
    display_name: "Navi Planning"
    supported_commands {
      key: "start"
      value: "supervisorctl start navigation_planning &"
    }
    supported_commands {
      key: "stop"
      value: "supervisorctl stop navigation_planning &"
    }
  }
}

再在代码中搜索navigation_planning,发现modules/tools/supervisord/dev.conf如下:

[program:navigation_planning]
command=/apollo/bazel-bin/modules/planning/planning --flagfile=/apollo/modules/planning/conf/planning_navi.conf --stderrthreshold=3 --use_navigation_mode
autostart=false
numprocs=1
exitcodes=0
stopsignal=INT
startretries=10
autorestart=unexpected
redirect_stderr=true
stdout_logfile=/apollo/data/log/planning.out

手动执行命令/apollo/bazel-bin/modules/planning/planning --flagfile=/apollo/modules/planning/conf/planning_navi.conf --stderrthreshold=3 --use_navigation_mode
出现错误Illegal instruction (core dumped) ,出现core dumped错误就要寻找日志。

寻找core dump日志:先用命令ulimit -c查看core日志是否开启,显示0为关闭,unlimited为开启。如显示0则执行命令ulimit -c unlimited。然后到/proc/sys/kernel目录下cat文件core_pattern。发现日志路径/apollo/data/core/core_%e.%p,根据路径和进程号找到日志core_planning.1193

日志找到,用gdb解析日志,命令gdb 执行程序 core日志(core.进程号)

ubuntu@in_dev_docker:/apollo/data/core$ gdb /apollo/bazel-bin/modules/planning/p
lanning core_planning.1193
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1
Copyright (C) 2014
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值