如何在catch块中设置断点? (C ++)

时间:2016-02-03 12:16:29

标签: c++ debugging gdb

当我尝试调试应用程序时,发生了一些奇怪的事情。当我在try-catch块的catch部分设置断点时,调试器不会在断点处停止。

这是一个例子。

try {
    throw std::overflow_error("test");
} catch (...) {
    qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE
}

当异常发生时,它会在屏幕上打印“捕获”,但它不会在此行停止。 (如果您有疑问;是的,我正在调试模式下构建应用程序并在调试模式下运行)

我是否缺乏关于gdb如何工作的基本知识? (我的意思是它可能不会停止,因为捕获部分中的断点不起作用)

非常感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分:2)

要在IDE中捕获异常,您需要直接在gdb控制台中发出gdb命令。 以下是如何在Qt Create IDE中进入gdb控制台的链接: Accessing gdb console in Qt-Creator

一旦你是类型

catch throw 

在程序抛出异常或

时停止
catch catch 

停在拦截区。

如果您需要捕获特定的异常,请阅读以下主题:GDB: How to break when a specific exception type is thrown?

答案 1 :(得分:0)

@ben sen,我猜任何意见都可能导致这种行为。有多种方法可以指定这些选项(通过环境变量aka CFLAGS或通过项目的IDE选项),但它们都会产生一些特定的-O选项给compiller命令行。即使根本没有提供任何内容,请检查您的编译器的默认优化。我的建议是明确地给编制者提供-O0并检查是否没有提供其他-O选项。

答案 2 :(得分:0)

对于使用LLDB的人,

def my_func(a,b):
    if a < 30:
        b = 0
    elif 30 <= a & a <= 90:
        b += (a-30)/2
    else:
        b += 30+(a-60)/4
    return a,b

# use the function in the following way:
# a,b = num1, num2
# a,b = my_func(a,b)

while会在掷球和接球时设置断点。