[英]How to set breakpoint in catch block? (c++)
當我嘗試調試應用程序時,發生了一些奇怪的事情。 當我在 try-catch 塊的 catch 部分設置斷點時,調試器不會在斷點處停止。
這是一個例子。
try {
throw std::overflow_error("test");
} catch (...) {
qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE
}
發生異常時,它會在屏幕上打印“捕獲”,但不會在此行停止。 (如果您想知道;是的,我正在 Debug 模式下構建應用程序並在 Debug 模式下運行)
我是否缺乏有關 gdb 工作原理的基本知識? (我的意思是它可能不會停止,因為 catch 部分中的斷點不起作用)
任何幫助將不勝感激。
謝謝。
要在 IDE 中捕獲異常,您需要直接在 gdb 控制台中發出 gdb 命令。 這是如何在 Qt Create IDE 中進入 gdb 控制台的鏈接: Accessing gdb console in Qt-Creator
一旦你是那種類型
catch throw
當您的程序拋出異常時停止或
catch catch
停在 catch 塊中。
如果您需要捕獲特定的庫異常,請閱讀此線程: GDB:拋出特定異常類型時如何中斷?
對於使用 LLDB 的人,
# set on both throw and catch
breakpoint set -E C++ -h true
# or on catch
b __cxa_begin_catch
# or on throw
b __cxa_throw
while 會在 throw 和 catch 上設置斷點。
@ben sen,我想任何意見都可能導致這種行為。 有很多方法可以指定這些選項(通過環境變量又名 CFLAGS 或通過項目的 IDE 選項),但它們都會導致某些特定的 -O 選項提供給編譯器命令行。 即使什么都沒給出,請檢查編譯器的默認優化是什么。 我的建議是明確地將 -O0 提供給編譯器並檢查是否提供了其他 -O 選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.