c – ROS_INFO_STREAM不打印

我试图在一个imbricated try … catch中使用ROS_INFO_STREAM,但我只有顶级输出

这是一小部分代码:

void failure()
{
    try
    {
      // throw std::length_error
      std::string("abc").substr(10);                    
    }
    catch (...)
    {
      ROS_ERROR_STREAM("ROS failure()");          // print OK
      std::cout << "cout failure()" << std::endl; // print OK
      throw; // re-throw the exception
    }
}


int main()
{
  try
  {
    ROS_ERROR_STREAM("ROS calling"); // print OK
    failure(); // will throw
  }
  catch (...)
  {
    ROS_ERROR_STREAM("ROS call function"); // <-- NO print
    std::cout << "cout call function" << std::endl; // print OK
  }

  return 0;
}

输出:

ROS calling
ROS failure()
cout failure()
cout call function

我的猜测是ROS_ERROR_STREAM看起来是缓冲的,但作为错误输出它不应该.

我正在运行ROS Groovy

最佳答案 当ROS节点中某处调用了ros :: shutdown()时,
rosconsole中的所有宏都停止工作.

我可以想象你会发生类似这样的事情:主要的catch块可能是在一个自动调用ros :: shutdown()函数的错误之后到达的.

如果你想保持与ROS宏提供的输出格式相同的输出格式,你可以使用像这样的简单代码,但忘记用颜色或其他东西突出显示代码:

std::cout << "[ INFO] [" << ros::Time::now() << "]: main catch" << std::endl;
点赞