嵌入GDB断点

dor*_*ron 1 c++ debugging gdb

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

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

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

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

Mat*_*son 5

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

对此使用什么指令取决于编译器和处理器,但是在大多数编译器中,都有“内部”或“内置”功能,例如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
}
Run Code Online (Sandbox Code Playgroud)

应该适用于x86和arm-您可能希望为架构选择宏使用“更好的名称”-我在不同的架构上所做的工作并不多,因此我没有确切记住正式名称是什么。

  • 使用 clang,我在“int 3”上收到错误“错误:指令的操作数无效”。将其更改为“int3”可解决此问题。 (2认同)