【发布时间】:2015-04-17 16:23:34
【问题描述】:
Java 人在这里坚持做一些 c++。我正在捕获一个异常并试图诊断它来自哪里(遗憾的是,通过 gdb 运行时没有抛出异常)。但是,当我打印出异常的 what() 时,我只得到字符串“std::exception”。这是特定于标准库中的任何内容还是许多标准异常返回这个?这是我要打印的内容:
} catch (const std::exception & ex) {
std::cout << ex.what() << std::endl;
}
输出只是:
std::exception
另外,我正在一个相当大的代码库中工作,这可能来自我们这边的一些异常,但我还没有通过常规搜索技术找到它,所以我目前倾向于这个即将到来来自标准库。
如果相关,我正在使用 g++ 4.8。
【问题讨论】:
-
您是否获得了可以在 gdb 中加载并进行回溯的核心转储?
-
哪里抛出了异常?它是如何抛出的?抛出什么异常?请创建一个Minimal, Complete, and Verifiable Example 并向我们展示。
-
这对于 GCC 库异常来说似乎很不寻常——我希望有一个更具体的派生类,如
std::runtime_error、std::length_error等(these 之一)与.what()进行通信。我认为这可能来自您自己的代码库。可能无济于事,但如果我是你,我会在你自己的代码中为'throw\s+std::exception'尝试递归 grep,如果没有出现任何问题,你可以尝试 GCC 标头。 -
那是 std::exception 的默认字符串吗?那是可能的。我正在寻找字符串“std::exception”,但如果那是默认字符串,那么该字符串本身可能不在代码库中。谢谢。
-
另外,没有核心转储。我无法将它加载到 gdb 中,因为它很少发生(大约每 50k 次我运行我的测试时发生一次),并且在 gdb 中运行时它会完全消失(heisenbug)。不幸的是,我没有 MCVE,因为那样可以解决问题。在我开始对每个 STL 调用进行 try/catch 之前,我一直在寻找对 STL 异常字符串的引用或遇到类似异常的其他人。