gpt4 book ai didi

c++ - 在 Linux 上断言失败后继续调试?

转载 作者:IT老高 更新时间:2023-10-28 22:17:51 25 4
gpt4 key购买 nike

当在 Windows 上使用 Visual C++ 的断言失败时,调试器会停止,显示消息,然后让您继续(或者,如果没有正在运行的调试 session ,则提供为您启动 Visual Studio)。

在 Linux 上,assert() 的默认行为似乎是显示错误并退出程序。由于我所有的断言都通过宏,我尝试使用信号来解决这个问题,比如

#define ASSERT(TEST) if(!(TEST)) raise(SIGSTOP);

但是虽然GDB (通过 KDevelop )停在正确的点,我似乎无法继续越过信号,并且在 GDB 中手动发送信号只会让我挂起,既不能控制 GDB,也不能控制调试的进程。

最佳答案

你真的想重现 DebugBreak 的行为.这会停止调试器中的程序。

我的“DebugBreak linux”谷歌搜索出现了several references到这个应该做同样事情的内联程序集。

#define DEBUG_BREAK asm("int $3")

那么你的断言就可以变成

#define ASSERT(TEST) if(!(TEST)) asm("int $3");

根据 Andomar int 3 导致 cpu 引发中断 3。根据 drpepper,更便携的方法是调用:

 raise(SIGTRAP);

关于c++ - 在 Linux 上断言失败后继续调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1721543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com