다른 사람들이 사용하게 될 ROS 노드를 프로그래밍하고 있으므로 공통된 지침을 따르고 싶습니다. 때로는 예외에 추가 정보를 추가하고 싶지만 어떻게해야할지 모르겠습니다. 다음은 유용 할 곳의 예입니다.C++ "예외적 인"예외 처리 방법
내 ROS 노드가 부스트 라이브러리를 사용하여 직렬 장치에 연결됩니다. 리눅스에서는 예를 들어/dev/ttyUSB0에 권한을 설정해야합니다. 그렇지 않으면 부스트가 직렬 연결을 열고 프로그램을 종료 할 수 없습니다. 나는 문제가 무엇인지, 내가 추가 정보를 사용자의 provice 할다시피
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what(): open: Permission denied
Aborted (core dumped)
:
다음은 콘솔에서 복사 한 예외 메시지입니다. 그래서 try/catch 블록을 사용하여 문제를 일으키는 줄을 감쌌다.
try{
serial = new boost::asio::serial_port (io, port);
}
catch(const std::exception& e)
{
cerr << "EXCEPTION CAUGHT: Boost::asio::serial_port could not open a connection. Make sure that you have read/write access to the serial port (run: sudo chmod a+rw /dev/ttyUSB0)" << endl;
cerr << endl << "Original exception:" << endl;
throw;
}
이 상황을 처리하는 것은 좋은 방법일까요? 미리 감사드립니다.
제 생각에는 엄밀히 말하자면 가능한 한 빨리 예외를 다루지 만 이전에는 그렇지 않습니다. 그 장소에서 오류 정보를 인쇄하는 것은 좋지 않을 수 있습니다. 예를 들어 여러 개의 직렬 어댑터를 사용할 수 있고 모든 어댑터를 시도하려는 상황을 생각해보십시오. 귀하의 기능은 오도 된 정보를 인쇄합니다. 대신 사용자 정의 유형을 만들거나 해당 위치에 추가 정보 (예 : Boost.Exception 사용)를 추가하고 나중에 오류 메시지를 출력하십시오. 귀하의 메인() 또는 그 오류에서 복구 할 수있는 장소에서. –