debugging Assert失败时中断调试器

20jt8wwn  于 2023-08-06  发布在  其他
关注(0)|答案(5)|浏览(106)

当Assert为false并使用Visual Studio调试器运行应用程序时,是否有方法中断调试器。早些时候,当我调试Windows应用程序时,我会得到一个异常,调试器会中断,但现在在智能设备上,一个Assert失败的窗口显示堆栈跟踪,但我也想看到变量值等。

vecaoik1

vecaoik11#

愚蠢的我,解决办法很简单。当窗口弹出时,在调试器中按暂停:)

h9vpoimq

h9vpoimq2#

不确定VS 2008,但至少在2010年及以后,您可以转到调试/异常(Ctrl-Alt-E)。单击“添加”按钮,选择“公共语言运行库异常”,然后键入:

Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException

字符串
然后点击“OK”它现在将出现在列表中,请确保您选中“抛出”列中的复选框。现在,您将在任何Assert失败时获得休息。
更新:截图来自VS 2017 x1c 0d1x

blmhpbnm

blmhpbnm3#

除了Vinay的解决方案之外,还可以通过调用
Debugger.Break
在您的例子中,可以在侦听器每次收到失败消息时执行此操作。

pdtvr36n

pdtvr36n4#

看起来你可以在Assert失败时附加调试器来查看其他细节-请参阅这篇文章:它相当过时,但也许仍然适用。

z4bn682m

z4bn682m5#

对于原生单元测试项目(C++),我们可以遵循类似于@Darrel霍夫曼的answer中的方法。
转到Debug->Windows->Exception Settings
x1c 0d1x的数据
Win32 Exceptions下添加新的例外。



对于错误代码,输入0xE3530001,并给予一些说明。



现在,从测试资源管理器中选择Debug,而不是Run
x1c4d 1x的
或者,即使您选择<All Win32 Exceptions not in this list>,它也会工作。


Visual Studio现在将在本机单元测试Assert***(Assert::IsTrue、Assert::IsFalse等)******失败***时中断。

注意,默认情况下,在Visual Studio异常设置中启用了对0xc0000420 Assertion failed异常的中断,但是当我们的单元测试Assert失败时,它不会导致调试器中断,因此上述步骤是必要的。


  • PS*:*@Darrel霍夫曼的答案对于C#单元测试已经足够了,但是对于原生C++需要一些额外的步骤,因此我的答案可能会帮助那些像我一样偶然发现这个原生用例的人。
    参考文献:
  1. https://unparalleledadventure.com/2019/02/05/the-one-where-we-reverse-engineered-microsofts-c-unit-test-framework-part-3-exceptions/
  2. https://stackoverflow.com/a/27660893/981766

相关问题