当前位置: 首页 > 面试题库 >

在Linux上断言失败后继续调试吗?

拓拔富
2023-03-14
问题内容

当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");

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

 raise(SIGTRAP);


 类似资料:
  • 我在单元测试中使用groovy脚本。我有以下代码片段,我在单个测试脚本中使用多个断言。 第一个断言失败并停止执行。但我想继续进一步的代码片段。 与selenium中的软断言类似,我应该如何收集groovy中的所有失败异常。

  • 问题内容: 我正在通过Java与Eclipse和TestNG框架一起使用Selenium RC。我有以下代码片段: 第一个断言失败,执行被停止。但我想继续进一步的代码片段。 问题答案: Selenium IDE使用验证执行软断言,这意味着即使检查失败,测试仍将继续,并且可以在测试结束时或在发生硬断言时报告失败。 使用TestNG,可以通过使用自定义测试侦听器来拥有这些软断言。我已经在博客上记录了如

  • 问题内容: 编辑:切换到一个更好的示例,并阐明了为什么这是一个真正的问题。 我想用Python编写在断言失败时继续执行的单元测试,这样我就可以在一个测试中看到多个失败。例如: 在这里,测试的目的是确保Car’s正确设置其字段。我可以将其分解为四个方法(这通常是个好主意),但是在这种情况下,我认为将其保留为测试单个概念的单个方法(“对象已正确初始化”)更容易理解。 如果我们认为最好不要破坏该方法,那

  • 问题内容: 我已经使用Jfunc构建了现有框架,该框架提供了即使测试用例中的一个断言失败时也可以继续执行的功能。Jfunc使用junit 3.x框架。但是现在我们正在迁移到junit4,所以我不能再使用Jfunc,而已将其替换为junit 4.10 jar。 现在的问题是,因为我们在框架中广泛使用了jfunc,并且使用junit 4,我们希望使我们的代码即使在测试用例中一个断言失败时也可以继续执行

  • 我按照cypress在他们的文档中推荐的方式编写测试,即每个测试有多个断言,但是用这种方式编写测试时会出现一个问题,那就是如果断言失败,测试执行就会停止。 我希望每个测试有多个断言,如果其中一个失败,测试将失败,但将继续测试执行,所以在最后,我将能够看到测试中失败的所有断言,而不仅仅是第一个失败的断言。 提前感谢!

  • 我已经在Netbeans上通过JS测试驱动程序设置了JavaScript单元测试。然而,与该教程中的结果不同,断言失败后不会执行更多测试。我怎样才能改变这种行为? 例如,给定此测试文件: 文件: 进度条显示50%,(2次测试),应该是33%。 文件: 我可以通过命令行运行所有测试。(在Windows PowerShell上)。按如下方式运行,失败后测试不会停止运行: java-jar$env: J