我正在编写一个通过抛出异常从错误中恢复的应用程序。
然而,在调试时,我希望我的调试器在抛出异常之前停止在我的错误点。无论如何添加一些代码会导致GDB用一些代码中断执行。
我对ARM和x86架构都很感兴趣,跨平台的某些东西会很有用。
编辑:我正在寻找一些断点指令或包含一个的宏。
答案 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)