2010-03-17 44 views
1

我有一些調試代碼,如果在運行GBD時運行應該會中斷應用程序的執行,但是如果GDB沒有運行,它應該繼續。如果gdb已連接,我該如何中斷?如果不是,請繼續?

我正在使用的代碼在結構是這樣的:

try 
{ 
    if(some_complex_expression) 
    { 
    gdb_should_break_here(); 
    do_some_stuff(); 
    throw MyException(); 
    } 
} 
catch(const MyException & e) 
{ 
    handle_exception_and_continue(); 
} 

我應該gdb_should_break_here是什麼?

回答

2

其實它看起來只是確保有一個空的gdb_should_break_here()函數,我需要打破的任何地方都可以工作。 (只要我不優化代碼)。

然後,所有我需要做的是一個

break gdb_should_break_here 

和gdb將在所有適當的地方停下來。

猜測我忽視了它,因爲我的代碼並不是很好的組織,並且包含在一些調試宏中。

+0

是的,這可能是最簡單的方法。在某些時候,您可能會發現將日誌記錄代碼放在那裏很有用。此外,即使您正在優化代碼,只要gdb_should_break_here的實現位於單獨的文件中,並且將其分別鏈接到最終的應用程序中,它仍將被調用(儘管爲空),因此GDB可以打破它。 – 2010-03-17 05:39:51

+0

是的不幸的是,這些功能是頭只庫的一部分。 我正在查看的代碼基本上是錯誤日誌記錄和處理代碼的一部分,因此更多的日誌記錄可能不適用。它僅用於調試罕見邊緣情況 - 特別是在需要堆棧跟蹤的情況下。 – 2010-03-17 07:02:29

相關問題