我的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)
答案 0 :(得分:2)
您使用调试器。
使用调试工具是学习C和C ++等编译语言的一项非常重要的技能。
答案 1 :(得分:0)
异常对象不携带任何源信息。但是,它们希望包含使用what()
成员可访问的有用消息。除此之外,你必须使用一个调试器,允许在抛出异常时中断,或者在std::logic_error
的构造函数中设置一个断点。只要异常是例外,这就行了。在非特殊情况下,代码抛出异常并不能很好地工作。