1

我正在编写一个通过抛出异常从错误中恢复的应用程序。

但是,在调试时,我希望调试器在引发异常之前停止在错误点。无论如何添加一些代码会导致GDB用一些代码中断执行。

我对 ARM 和 x86 架构都感兴趣,一些跨平台的东西会很有用。

编辑:我正在寻找一些断点指令或包装一个的宏。

4

2 回答 2

7

您可以在代码中添加“断点指令”。如果没有附加调试器,我所知道的大多数操作系统都会忽略断点。

这取决于编译器和处理器,您为此使用什么指令,但在大多数编译器中都有一个“内在”或“内置”函数,例如DebugBreak();MS 编译器和__builtin_trap();gcc 及相关函数。

编辑:__builtin_trap();是个坏主意,因为它会阻止代码进一步运行。相反,使用内联汇编器:

inline void DebugBreak()
{
#if defined(X86)
    __asm__ __volatile__("int 3");
#elif defined(ARM)
    __asm__ __volatile__("bkpt"); 
#else
  #error DebugBreak not defined for this architecture or no architecture defined.
#endif
}

应该适用于 x86 和 arm - 您可能希望为架构选择宏使用“更好”的名称 - 我对不同的架构做的工作不多,所以我没有准确记住官方名称是什么。

于 2013-04-17T10:36:31.370 回答
2

设置这个:

catch throw

应该给你你所追求的。

请参阅用户手册这一部分

于 2013-04-17T10:32:40.050 回答