嵌入GDB断点

时间:2013-04-17 10:24:52

标签: c++ debugging gdb

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

编译器和处理器依赖于您使用的指令,但在大多数编译器中都有“内在”或“内置”功能,例如MS编译器的DebugBreak();和gcc的__builtin_trap();和相关的。

编辑:__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 - 您可能希望为架构选择宏提供“更好”的名称 - 我不会对不同的架构做很多工作,所以我没有记住官方名称的确切内容。

答案 1 :(得分:2)

设置:

catch throw

应该给你你想要的东西。

请参阅this sectionuser manual