【问题标题】:Find Source of STL::Exception in basic_string在 basic_string 中查找 STL::Exception 的来源
【发布时间】:2012-10-04 18:32:09
【问题描述】:

我正在尝试跟踪 std::exception 的来源,在 basic_string::erase 中,我将我直接调用擦除的所有位置都包装在 try/catch 中,并且没有看到任何这些 catch 块被命中,所以它必须是从另一个 basic_string 方法内部调用的。该异常似乎是我正在使用的代码中竞争条件的结果,因此很难重现,关于我如何检测和/或从此异常获取堆栈跟踪的任何想法?顺便说一句,这是 x86 linux 机器上的 c++ 代码。

谢谢

【问题讨论】:

  • 如果basic_string::erase 由于竞争条件而引发异常,我看不出您为什么需要异常源。删除竞争条件。
  • 标准规定basic_string::erase throws: out_of_range if pos > size().
  • 您是否在竞争条件下使用擦除调用?
  • @MooingDuck:大概 OP 不知道竞争条件 是什么,只知道似乎有一个,并且(s)他希望追踪位置的异常将有助于识别它。 (见De dicto and de re on Wikipedia。)
  • 你确定这是一个例外,而不是一个断言?

标签: c++ linux string exception std


【解决方案1】:

你应该试试

(gdb) 捕捉抛出

那么gdb每次抛出异常都会触发断点。你会看到一个调用栈。

编辑:这篇文章是调试异常的好技巧:GDB: How to break when a specific exception type is thrown?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2011-05-23
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多