获取std:logic_error的任何行号

时间:2012-03-25 00:20:56

标签: c++ runtime-error

我的C ++程序以std :: logic_error退出,我想跟踪导致它的源代码行。我怎么能这样做?

TBH,我正在使用gdb,使用g ++ -g来添加调试信息。我能得到的就是这些信息:

此应用程序已请求Runtime以不寻常的方式终止它。 有关更多信息,请联系应用程序的支持团队。 在抛出'std :: logic_error'的实例后终止调用   what():basic_string :: _ S_construct null无效

Catchpoint 1 (exception thrown), 0x0045ffa0 in __cxa_throw ()
(gdb) bt
#0  0x0045ffa0 in __cxa_throw ()
#1  0x004601e8 in std::__throw_logic_error(char const*) ()
#2  0x00502238 in typeinfo for std::__timepunct<wchar_t> ()
#3  0x004685f8 in std::runtime_error::what() const ()
#4  0x03210da8 in ?? ()
#5  0x002efbcc in ?? ()
#6  0x00468734 in std::domain_error::~domain_error() ()
#7  0x00000000 in ?? ()
(gdb)

2 个答案:

答案 0 :(得分:2)

您使用调试器。

使用调试工具是学习C和C ++等编译语言的一项非常重要的技能。

答案 1 :(得分:0)

异常对象不携带任何源信息。但是,它们希望包含使用what()成员可访问的有用消息。除此之外,你必须使用一个调试器,允许在抛出异常时中断,或者在std::logic_error的构造函数中设置一个断点。只要异常是例外,这就行了。在非特殊情况下,代码抛出异常并不能很好地工作。