在Linux上断言失败后继续调试吗?
当Windows上的Visual C ++断言失败时,调试器将停止,显示消息,然后让您继续(或者,如果未运行调试会话,则为您启动Visual
Studio)。
在Linux上,assert()的默认行为似乎是显示错误并退出程序。由于我所有的断言都通过宏进行,因此我尝试使用信号来解决此问题,例如
#define ASSERT(TEST) if(!(TEST)) raise(SIGSTOP);
但是,尽管GDB(通过KDevelop)停在了正确的位置,但我似乎无法继续过去,并且在GDB中手动发送信号只会让我感到困惑,无法控制GDB或调试过程。
回答:
您确实想重新创建DebugBreak的行为。这将停止调试器中的程序。
我对“ DebugBreak
linux”的谷歌搜索已经发现了对该内联汇编的一些
引用,这些内联汇编应该也可以这样做。
#define DEBUG_BREAK asm("int $3")
然后你的断言可以变成
#define ASSERT(TEST) if(!(TEST)) asm("int $3");
根据 说法,int 3会导致cpu引发中断3。根据 的说法,更 的方法是调用:
raise(SIGTRAP);
以上是 在Linux上断言失败后继续调试吗? 的全部内容, 来源链接: utcz.com/qa/408401.html