c++ - 嵌入 GDB 断点

标签 c++ debugging gdb

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

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

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

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

最佳答案

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

编译器和处理器依赖于你为此使用什么指令,但在大多数编译器中有一个“内部”或“内置”函数,例如用于 MS 编译器的 DebugBreak();__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 - 您可能希望为架构选择宏使用“更好”的名称 - 我对不同架构的工作不多,所以我没有记住官方名称的确切含义。

关于c++ - 嵌入 GDB 断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16057589/

相关文章:

c++ - 自定义创建 QFuture

wcf - 如何从代码而不是应用程序配置文件启用 WCF 消息日志记录

multithreading - 确定性执行Java线程,工具支持

gdb - 将 gdb 添加到 MinGW

Gdb 进程记录/重放执行日志

c++ - 在 lambda 中通过引用捕获 thread_local 变量无法按预期工作

c++ - 通过 protected 构造函数和静态成员函数强制使用 std::shared_ptr 以创建实例和 std::make_shared

c++ - gdb 调试远程核心转储

c++ - 在使用 C++ 的虚拟继承期间调用构造函数

c++ - 银行模拟无限循环