【发布时间】:2012-10-04 18:32:09
【问题描述】:
我正在尝试跟踪 std::exception 的来源,在 basic_string::erase 中,我将我直接调用擦除的所有位置都包装在 try/catch 中,并且没有看到任何这些 catch 块被命中,所以它必须是从另一个 basic_string 方法内部调用的。该异常似乎是我正在使用的代码中竞争条件的结果,因此很难重现,关于我如何检测和/或从此异常获取堆栈跟踪的任何想法?顺便说一句,这是 x86 linux 机器上的 c++ 代码。
谢谢
【问题讨论】:
-
如果
basic_string::erase由于竞争条件而引发异常,我看不出您为什么需要异常源。删除竞争条件。 -
标准规定
basic_string::erasethrows: out_of_range if pos > size(). -
您是否在竞争条件下使用擦除调用?
-
@MooingDuck:大概 OP 不知道竞争条件 是什么,只知道似乎有一个,并且(s)他希望追踪位置的异常将有助于识别它。 (见De dicto and de re on Wikipedia。)
-
你确定这是一个例外,而不是一个断言?
标签: c++ linux string exception std