如何在catch块中设置断点?(c++)
当我尝试调试应用程序时,发生了一些奇怪的事情。简单地说,当我在try-catch块的catch部分设置断点时,调试器不会在断点上停止 这里有一个例子如何在catch块中设置断点?(c++),c++,debugging,gdb,C++,Debugging,Gdb,当我尝试调试应用程序时,发生了一些奇怪的事情。简单地说,当我在try-catch块的catch部分设置断点时,调试器不会在断点上停止 这里有一个例子 try { throw std::overflow_error("test"); } catch (...) { qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE } 当发生异常时,它会打印屏幕上捕获的内容,但不会在此行停止。如果你想知道;是的,我
try {
throw std::overflow_error("test");
} catch (...) {
qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE
}
当发生异常时,它会打印屏幕上捕获的内容,但不会在此行停止。如果你想知道;是的,我正在调试模式下构建应用程序并在调试模式下运行
我是否缺乏关于gdb如何工作的基本知识?我的意思是,它可能不会停止,因为catch部分中的断点不起作用
任何帮助都将不胜感激
谢谢。@ben sen,我想任何观点都可能导致这种行为。有许多方法可以通过环境变量(也称为CFLAGS)或通过项目的IDE选项来指定这些选项,但它们都会导致编译器命令行中指定特定的-O选项。即使没有给出任何东西,请检查编译器的默认优化是什么。我的建议是明确地向编译器提供-O,并检查是否没有提供其他-O选项。@ben sen,我想任何意见化都可能导致这种行为。有许多方法可以通过环境变量(也称为CFLAGS)或通过项目的IDE选项来指定这些选项,但它们都会导致编译器命令行中指定特定的-O选项。即使没有给出任何东西,请检查编译器的默认优化是什么。我的建议是明确地向编译器提供-O,并检查是否没有提供其他-O选项。要在IDE中捕获异常,需要直接在gdb控制台中发出gdb命令。 下面是如何在Qt Create IDE中进入gdb控制台的链接: 一旦你是那种人
catch throw
在程序引发异常或异常时停止
catch catch
停在挡块上
如果您需要捕获特定的库异常,请阅读以下线程:要在IDE中捕获异常,您需要直接在gdb控制台中发出gdb命令。 下面是如何在Qt Create IDE中进入gdb控制台的链接: 一旦你是那种人
catch throw
在程序引发异常或异常时停止
catch catch
停在挡块上
如果需要捕获特定的库异常,请阅读以下线程:对于使用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将在抛出和捕获时设置断点。对于使用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上设置断点。您确定cv::threshold会抛出吗?*如果您的代码抛出异常,则只有它会出现在catch块中。所以请确保。@MohamadElghawi您问这个问题是对的。我没有提到对不起,这只是一个伪代码。它不必是阈值方法。使用catch-catch,gdb中的catch throw这是在Qt Creator中访问gdb控制台的方法:您需要键入catch-catch或catch-throw或两者来停止异常时的程序执行。您确定cv::threshold会抛出吗?*如果您的代码抛出异常,则只有它会出现在catch块中。所以请确保。@MohamadElghawi您问这个问题是对的。我没有提到对不起,这只是一个伪代码。它不必是阈值方法。在gdb中使用catch-catch,catch-throw这就是如何在Qt Creator中访问gdb控制台:您需要键入catch-catch或catch-throw或两者来停止异常时的程序执行。我道歉,我将我的注释放在错误的字段中-请不要将其视为答案,而是作为注释。谢谢,谢谢。我禁用了-O0的优化,并尝试重新编译我的应用程序。我道歉,我把我的评论放到了一个错误的栏位——请不要把它当作一个答案,而是当作一个评论。谢谢,谢谢。我禁用了-O0的优化,并尝试重新编译我的应用程序。它又一次没有停在挡块上。