我在C#
中编写了从命令行调用MSTest
的程序。
其中一个测试用例抛出StackOverflowException
,导致QtAgent32
(以及我的应用程序)进程中断。
我能做些什么来防止这种情况(我不能改变单元测试)?
答案 0 :(得分:3)
可以避免这种崩溃的一种方法是在QTAgent32.exe.config中设置legacyUnhandledExceptionPolicy属性(和/或QTAgent.exe.config,具体取决于机器/ testrun的位数),如上所述{{3 }}。此链接的相关文字是: -
作为临时兼容性措施,管理员可以在应用程序配置文件的部分中放置兼容性标志。这会导致公共语言运行库恢复到版本1.0和1.1的行为。
这会将“未处理的异常”处理行为切换到.net 1.1,并且进程不会因此类异常而崩溃。
答案 1 :(得分:2)
问题是你无法在.NET上捕获StackOverflowException
(从2.0版本开始)。这可能意味着没有办法解决你遇到的问题 - 因为单元测试框架根本无法捕获异常。
请参阅以下相关的SO问题:
在另一个线程上有一些有趣的建议 - 例如,您可以创建Thread
并检查当前FrameCount
以更早地检测堆栈溢出。但是,这可能不会非常可靠。所以,我担心没有好的答案......