簡體   English   中英

如何在catch塊中設置斷點? (c++)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM