2015-09-24 1 views
4

Я пытаюсь использовать ROS_INFO_STREAM внутри чешуйчатой ​​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

ответ

2

Все макросы в rosconsole перестают работать, когда ros::shutdown() была вызвана где-то в узле РОС.

Я могу себе представить, что что-то подобное происходит с вами: блок catch в главном, вероятно, достигнут после ошибки, которая автоматически вызывает функцию ros::shutdown().

Если вы хотите сохранить тот же формат, как один, предоставляемой НСП макросов, вы можете использовать простой код, как этот, но забывают, чтобы получить код выделен цветом или другим материалом:

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

Окрашивание выходных данных на самом деле не так сложно, как только вы попали в него (см. [Этот ответ] (http://stackoverflow.com/a/2616912/2095383)). Это другой вопрос, конечно, стоит ли это усилий. – luator

Смежные вопросы