Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌入GDB断点_C++_Debugging_Gdb - Fatal编程技术网

C++ 嵌入GDB断点

C++ 嵌入GDB断点,c++,debugging,gdb,C++,Debugging,Gdb,我正在编写一个通过抛出异常从错误中恢复的应用程序 但是,在调试时,我希望我的调试器在抛出异常之前在错误点停止。无论如何,是否需要添加一些代码,这些代码将导致GDB用一些代码中断执行 我对ARM和x86体系结构都感兴趣,一些跨平台的东西会很有用 编辑:我正在寻找一些断点指令或包装断点指令的宏。设置: catch throw 应该给你你想要的 请参见。的设置: catch throw 应该给你你想要的 请参阅。的,您可以向代码中添加断点指令。我所知道的大多数操作系统在没有附加调试器的情况下会忽略

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

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

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

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

设置:

catch throw
应该给你你想要的

请参见。

的设置:

catch throw
应该给你你想要的


请参阅。

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

这取决于编译器和处理器,但在大多数编译器中都有一个内在的或内置的函数,比如DebugBreak;用于MS编译器和内置陷阱;对于gcc和相关的

编辑:内置陷阱;这是个坏主意,因为它会阻止代码进一步运行。相反,使用内联汇编程序:

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-您可能希望为体系结构选择宏提供更好的名称-我不太适合不同的体系结构,因此我没有准确记住正式名称。

您可以在代码中添加断点指令。我所知道的大多数操作系统在没有附加调试器的情况下会忽略断点

这取决于编译器和处理器,但在大多数编译器中都有一个内在的或内置的函数,比如DebugBreak;用于MS编译器和内置陷阱;对于gcc和相关的

编辑:内置陷阱;这是个坏主意,因为它会阻止代码进一步运行。相反,使用内联汇编程序:

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-您可能希望为架构选择宏提供更好的名称-我对不同的架构没有做太多工作,因此我没有准确记住正式名称。

您在问GDB是否有任何方法可以预测我将抛出异常,在CPU执行另一条指令之前,猛拉断点。我想你知道答案;你是在添加了一些东西之后,如果我到这里,每次到达特定代码时都会中断吗?@Mats,这就是我要问的问题你是在问GDB是否有任何方法可以预测我将抛出异常,并在CPU可以执行另一条指令之前猛拉中断。我想你知道答案;你是不是在添加了一些东西,如果我到这里,每次到达特定代码时都会中断?@Mats,这就是我要问的。这或多或少是我要找的。唯一的问题是,内置陷阱往往会扼杀执行。对不起,另一个答案是,就这些目的而言,它似乎很糟糕。编辑即将发生…使用clang,我得到了错误:int 3上指令的操作数无效。将其更改为int3修复了此问题。这或多或少是我正在寻找的。唯一的问题是,内置陷阱往往会扼杀执行。对不起,另一个答案是,就这些目的而言,它似乎很糟糕。编辑即将发生…使用clang,我得到了错误:int 3上指令的操作数无效。将其更改为int3修复了此问题。