当我尝试调试应用程序时,发生了一些奇怪的事情。当我在try-catch块的catch部分设置断点时,调试器不会在断点处停止。
这是一个例子。
try {
throw std::overflow_error("test");
} catch (...) {
qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE
}
当异常发生时,它会在屏幕上打印“捕获”,但它不会在此行停止。 (如果您有疑问;是的,我正在调试模式下构建应用程序并在调试模式下运行)
我是否缺乏关于gdb如何工作的基本知识? (我的意思是它可能不会停止,因为捕获部分中的断点不起作用)
非常感谢任何帮助。
感谢。
答案 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会在掷球和接球时设置断点。