gpt4 book ai didi

C++ "Proper"异常处理方式

转载 作者:搜寻专家 更新时间:2023-10-31 00:15:23 28 4
gpt4 key购买 nike

我正在编写一个可能会被其他人使用的 ROS 节点,这就是我想要遵循通用指南的原因。有时我想为异常添加额外的信息,但我不知道该怎么做。这是一个方便的示例:

我的 ROS 节点使用 boost 库连接到串行设备。在 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 block 包装导致问题的行:

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;
}

这是处理这种情况的好方法还是坏方法?提前致谢

最佳答案

您正在捕获所有 std::exceptions。我认为你应该只捕获 boost::system::system_error 异常。

否则您可能会打印误导性的错误报告(即,在分配失败的情况下您还会捕获 std::bad_alloc)。

关于C++ "Proper"异常处理方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19565067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com