2012-03-25 76 views
0

我的C++程序退出std :: logic_error,我想跟蹤導致它的源代碼行。我怎樣才能做到這一點?獲取std的所有行號:logic_error

TBH,我使用gdb,使用g ++ -g爲了添加調試信息。我所能得到的是這些消息:

此應用程序已請求運行時以不尋常的方式終止它。 有關更多信息,請聯繫應用程序的支持團隊。 basic_string的:: _ S_construct空無效

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 0xda8 in ??() 
#5 0x002efbcc in ??() 
#6 0x00468734 in std::domain_error::~domain_error()() 
#7 0x00000000 in ??() 
(gdb) 

回答

0

異常對象不攜帶任何源信息。但是,他們希望包含一個有用的消息,使用what()成員即可訪問。除此之外,您必須使用一個調試器,以允許在拋出異常時中斷,或將斷點設置爲std::logic_error的構造函數。只要例外情況異常,這可以正常工作。在非例外的情況下,它不適用於代碼拋出異常。

+0

謝謝你,你的回答其實是對的,但我忘了提及我正在嘗試使用g ++和gdb。 – Mael 2012-03-25 08:19:19

2

您使用調試器: 終止拋 '的std :: logic_error' 什麼()的一個實例後調用。

使用調試工具是學習編譯語言(如C和C++)的一項非常重要的技能。