如何从非远外例外减少调试开销
How can I reduce the debugging overhead from non-exceptional exceptions
我们使用的API在很大程度上依赖于返回非检查结果的例外。一个例子(在许多人中)是要确定用户是否在一组人中,我们必须尝试获取小组并解释结果"无组"例外。此外,所有这些异常都是一种类型。
我们正在使用大量多线程的C 11进行大型且复杂的项目,此外,我们正在研究关注网络通信的领域,因此我们必须同时调试多个实例。
。我们的问题,因此我的问题的基础是由于非检查异常对我们的工作流程的影响。我们不愿意关闭API投掷的单个异常类型的第一次算法例外报告,因为这意味着如果我们呼叫API,编码器错过了尝试/捕获块的API,我们将放松一下主要和失去了通话的上下文。如果我们对例外情况下的例外,那么简单的非远外行为(例如上面示例中描述的行为)可能会导致多次休息(初始投掷和可能是一些重新介绍),我们只能验证这实际上是非 - 通过查询堆栈(通常是非序列线)来查找引起异常的API调用。
我相信我们的用例并不独特,以至于其他人不会遇到相同的工作流问题,因此我的问题是我们应该如何更改调试过程,以更好地应对不受欢迎的例外问题,如上所述。
我们目前仅限于使用Visual Studio(或潜在的WindBG)进行调试。
在非优先用例中抛出异常是完全错误的IMO。下一步:每个功能都是void
,通过抛出异常,一切都会返回。
您使用的是第三部分API,该API显示了这种奇怪的行为。这是我通常在处理任何类型的"奇数API"时考虑的内容,包括用愚蠢的宏来污染所有内容的C-
- 尝试避免行为奇怪的部分。在您的情况下:如果您可以打电话,请进行拨打,即致电
if(hasGroup) getGroup; else ...
而不是try {getGroup;} catch(X) {...}
,而不是通过编写包装器API来限制所有代码中的奇数涟漪。在您的情况下:写一个捕获异常并以正常返回值转换的包装器。这样,您的编码器就不会忘记捕获正常的案例外观(因为您的包装器不会抛出它们),如果将包装器放入其自己的库中,则可以在包装器API中使用另一个异常策略。GetGroup问题的快速示例:
//myAPIWrapper.h namespace myAPIWrapper { class Group; class User { public: boost::optional<Group> getGroup(); }; } //myAPIWrapper.cpp #include "OddAPI.h" namespace myAPIWrapper { boost::optional<Group> User::getGroup() { boost::optional<Group> theGroup; try { oddAPI::user& oddUser= unwrap(*this); oddAPI::group& oddGroup = oddUser.get_group(); theGroup = wrap(oddGroup); } catch(oddAPI::exception&) { } return theGroup; } }
- 当回溯以零开始时,如何调试崩溃
- 实现无开销push_back的最佳方法是什么
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 如何在C++生成器中禁用"使用调试.dcus"
- 使用vscode调试时,GDB意外退出
- 即使使用调试编译标志,表达式也是"optimized out"
- 调试 CUDA MMU 故障
- 小字符串优化(调试与发布模式)
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- 调试和自由执行中的信号处理
- 调试编译的服务器在数据库打开时崩溃
- Visual Studio 调试优化如何工作?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 如何从非远外例外减少调试开销