他の人が使用する可能性が高い ROS ノードをプログラミングしているため、共通のガイドラインに従いたいと考えています。例外に追加情報を追加したい場合がありますが、その方法がわかりません。これが便利な場所の例を次に示します。
私の ROS ノードは、ブースト ライブラリを使用してシリアル デバイスに接続します。Linux では、たとえば /dev/ttyUSB0 にパーミッションを設定する必要があります。そうしないと、boost がシリアル接続を開いてプログラムを終了できなくなります。
コンソールからコピーされた元の例外メッセージは次のとおりです。
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;
}
これは、この状況に対処するための良い方法ですか、それとも悪い方法ですか? 前もって感謝します