HuaYuXiao / Fast-Planner

[RA-L 2019] A Robust and Efficient Trajectory Planner for Quadrotors
GNU General Public License v3.0
0 stars 0 forks source link

[dyn_planner_node-22] process has died [pid 15517, exit code -6 #40

Open HuaYuXiao opened 2 months ago

HuaYuXiao commented 2 months ago
---planning_fsm: get waypoint: [ 2.000000, 2.000000, 1.000000]!---
*** buffer overflow detected ***: terminated
Stack trace (most recent call last):
#21   Object "[0xffffffffffffffff]", at 0xffffffffffffffff, in 
#20   Object "/home/hyx020222/planner_ws/devel/lib/prometheus_plan_manage/dyn_planner_node", at 0x55dd399c614d, in _start
#19   Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077fea8082, in __libc_start_main
#18   Object "/home/hyx020222/planner_ws/devel/lib/prometheus_plan_manage/dyn_planner_node", at 0x55dd399c5bb8, in main
#17   Object "/opt/ros/noetic/lib/libroscpp.so", at 0x7f078059c21e, in ros::spin()
#16   Object "/opt/ros/noetic/lib/libroscpp.so", at 0x7f07805b3fce, in ros::SingleThreadedSpinner::spin(ros::CallbackQueue*)
#15   Object "/opt/ros/noetic/lib/libroscpp.so", at 0x7f0780560882, in ros::CallbackQueue::callAvailable(ros::WallDuration)
#14   Object "/opt/ros/noetic/lib/libroscpp.so", at 0x7f078055f171, in ros::CallbackQueue::callOneCB(ros::CallbackQueue::TLS*)
#13   Object "/opt/ros/noetic/lib/libroscpp.so", at 0x7f07805b1138, in ros::SubscriptionQueue::call()
#12   Object "/home/hyx020222/planner_ws/devel/lib/prometheus_plan_manage/dyn_planner_node", at 0x55dd399dfaf7, in ros::SubscriptionCallbackHelperT<boost::shared_ptr<geometry_msgs::PoseStamped_<std::allocator<void> > const> const&, void>::call(ros::SubscriptionCallbackHelperCallParams&)
#11   Object "/home/hyx020222/planner_ws/devel/lib/prometheus_plan_manage/dyn_planner_node", at 0x55dd399dc981, in boost::detail::function::void_function_obj_invoker1<boost::function<void (boost::shared_ptr<geometry_msgs::PoseStamped_<std::allocator<void> > const> const&)>, void, boost::shared_ptr<geometry_msgs::PoseStamped_<std::allocator<void> > const> >::invoke(boost::detail::function::function_buffer&, boost::shared_ptr<geometry_msgs::PoseStamped_<std::allocator<void> > const>)
#10   Object "/home/hyx020222/planner_ws/devel/lib/prometheus_plan_manage/dyn_planner_node", at 0x55dd399cfc6d, in dyn_planner::PlanningFSM::waypointCallback(boost::shared_ptr<geometry_msgs::PoseStamped_<std::allocator<void> > const> const&)
#9    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ffb206a, in __sprintf_chk
#8    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ff090f8, in 
#7    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077fefa971, in 
#6    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ff16023, in _IO_default_xsputn
#5    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ff0904e, in 
#4    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ffb2575, in __chk_fail
#3    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ffb3cd9, in __fortify_fail
#2    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077ff1126d, in 
#1    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077fea6858, in abort
#0    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f077fec700b, in gsignal
Aborted (Signal sent by tkill() 15517 1000)
[ INFO] [1713851931.356840782, 391.834000000]: MapsManager: cleanup point clouds (48800 points, 56 cached clouds, ~5 MB)...
[ INFO] [1713851931.357009810, 391.835000000]: MapsManager: cleanup 28 grid maps (~2 MB)...
[ INFO] [1713851931.357082575, 391.835000000]: rtabmap (314): Rate=1.00s, Limit=0.000s, Conversion=0.0007s, RTAB-Map=0.0690s, Maps update=0.0001s pub=0.0003s (local map=28, WM=28)
[dyn_planner_node-22] process has died [pid 15517, exit code -6, cmd /home/hyx020222/planner_ws/devel/lib/prometheus_plan_manage/dyn_planner_node /prometheus/planning/global_pcl:=/rtabmap/cloud_map __name:=dyn_planner_node __log:=/home/hyx020222/.ros/log/b31ca07c-0135-11ef-bf6c-6fe2d8c34205/dyn_planner_node-22.log].
log file: /home/hyx020222/.ros/log/b31ca07c-0135-11ef-bf6c-6fe2d8c34205/dyn_planner_node-22*.log
HuaYuXiao commented 2 months ago

从你提供的错误信息来看,dyn_planner_node进程遇到了一个缓冲区溢出(buffer overflow)的问题,这通常是一个严重的编程错误,可能由以下原因引起:

  1. 数组越界:代码中可能存在对数组的不当访问,导致超出了分配的内存空间。
  2. 格式化字符串漏洞:使用像sprintf这样的函数时,如果格式化字符串不正确,可能会导致写入超出缓冲区的数据。
  3. 内存损坏:可能是由于内存损坏导致的错误,这可能由多种原因引起,包括内存泄漏、错误的内存释放等。

错误信息中的*** buffer overflow detected ***: terminated表明系统检测到了缓冲区溢出并终止了进程以防止进一步的损害。

要解决这个问题,你可以尝试以下步骤:

  1. 调试程序:使用调试工具(如GDB)来定位导致缓冲区溢出的确切位置。

  2. 审查代码:检查dyn_planner_node的源代码,特别是waypointCallback函数,因为它在堆栈跟踪中被提到。

  3. 检查ROS消息:确认geometry_msgs::PoseStamped消息的处理是否正确,特别是任何可能涉及字符串或数组处理的部分。

  4. 更新和维护代码:如果这是第三方库或代码的一部分,请检查是否有更新或补丁。

  5. 资源限制:确认系统没有达到资源限制,如内存或进程数限制。

  6. 系统日志和ROS日志:查看系统日志和ROS日志文件,以获取更多关于出错上下文的信息。

  7. 咨询社区:如果你无法独立解决问题,考虑在ROS社区或相关技术论坛上寻求帮助。

  8. 重新启动节点:在解决了问题后,重新启动dyn_planner_node

  9. 安全编程实践:如果问题是由于不安全的编程实践导致的,考虑使用更安全的函数,如snprintf,或采用其他方式来避免缓冲区溢出。

请注意,缓冲区溢出是一个复杂的问题,可能需要深入的调试和代码审查来解决。如果你不熟悉这些概念,可能需要寻求专业的帮助。

HuaYuXiao commented 2 months ago

Never try to use printf and sprintf in C++!