2012-12-09 195 views
2

追趕這樣,使用GDBGDB。只捕獲不捕獲的異常

catch throw 

當異常被拋出,程序停止。

如何讓GDB不會停止,當異常被拋出,但由節目抓? 或者我應該有全球性的try-catch,而不是使用GDB

catch throw 

EDIT1

try 
{ 
    // every time exception is thrown 
    // program is stopped by GDB 
} 
catch(const std::exception &e) 
{ 
    // even if the exception is caught by the program 
} 

EDIT2開始GDB

gdb 
file /usr/home/user/program 
shell ps x 
attach #pid 
catch throw 
c 
+0

能否請您闡述一下你是什麼意思?或者至少發佈一些完整的代碼? –

+0

你沒有使用GDB ** catch throw ** –

+1

很難理解'catch throw'部分是GDB命令。我建議你改寫一下,比如「在GDB中使用命令'catch throw'時,...」 –

回答

3

catch throw將捕獲所有拋出的異常並沒有辦法限制。

你在這裏至少有兩個選項。你完全可以根本不使用catch throw,如果你對unix有一些瞭解,它會在出現異常時停止故障並停止,如果它不被捕獲的話。

或者你可以在__raise_exception上設置一個斷點,如ftp://ftp.gnu.org/pub/old-gnu/Manuals/gdb/html_node/gdb_30.html(這是我使用谷歌時的第一次打擊 - 請在發佈在Stackoverflow上之前試着研究自己)。

+0

什麼時候捕捉什麼都不可能在segfault上看到回溯? –

+0

是的,如果你沒有發現異常,gdb應該向你展示在投擲點的回溯。 –