VS 17 打破所有异常

Posted

技术标签:

【中文标题】VS 17 打破所有异常【英文标题】:VS 17 breaking on all exceptions 【发布时间】:2017-12-01 03:03:26 【问题描述】:

Visual Studio 2017 (有点突然)打破了所有异常。这意味着,如果我在异常设置中停用它们(在调试时按 CTRL + ALT + E),调试器仍然会中断它们。我不知道这只是 VS 的一个错误,我无法更改因此必须忍受,或者是否有一个简单的解决方案。

这是异常设置窗口:

这个异常VS中断:

顺便说一句,我还尝试了那个漂亮的减号(如果我按下它什么都不会发生)或添加一个不可能的条件(VS 仍然在异常中中断)。

我还测试了其他异常(通过简单地抛出它们),我之前禁用了它们,它们也被抛出,我在其他项目中测试了同样的问题,它也出现了:

实际上我什至把所有的东西都放到了 try catch 语句中,但 VS 还是会中断:

InitializeComponent ();
try

    var t = new Thread (() =>
    
        while (!IsHandleCreated)  //It breaks here (similiar to the screenshots)
        while (true)
            Invoke (new Action (() => Size = new Size ()));
    );
    while (true)
    
        t.Start ();
        Thread.Sleep (100);
        t.Abort ();
    

catch (ThreadAbortException)  

它不会出现在我 PC 上的其他 IDE(如 Rider)中,也不会出现在 VS 中的其他 PC 上。它并不总是发生在我的电脑上,它最近才开始并且仅在调试模式下。如果我继续执行(使用 F5),它就会正常继续。

编辑当我将 try catch 放在线程中时,它的行为有点不同(我很抱歉在这里放了图片,但我认为在这种情况下它们更具表现力):

任何人可以解释这种行为吗?

EDIT ThreadAbortExceptions 在 catch 语句结束时再次中断似乎是正常的。但是,VS 仍然不应该在这个异常上中断。

【问题讨论】:

作为旁注:你的 try catch 应该在创建的线程内,当前你的 try catch 是在 UI 线程上,没有异常被捕获...... @M.kazemAkhgary 我编辑了我的问题 看 - 有时在无法以“正常”方式重现错误的情况下尝试查找和解释错误的时间太长了。 (1) 尝试重新启动并 (2) 恢复到您之前的代码并构建到该点。是的,我知道我的评论不是“答案”,但你可以花费数小时和数天徒劳地追踪这件事 - 最好继续前进。 @rlb.usa 已经尝试了多次重新启动,并且您可以看到其他代码(我实际上创建了一个新项目)也不起作用,那么为什么要恢复到以前的代码呢?我的意思是,没关系,我可以忍受这只是 VS 的另一个错误的可能性,我只是好奇,是否有人有解决方案。这非常烦人,因为我经常完全有意识地提出这个例外。 您可以在msdn.microsoft.com 上打开有关此问题的问题或通过选择VS 顶部的图标来报告错误,即send feedback 然后report a problem,如果这确实是VS 中的错误,那么您最好有机会解决这个问题 【参考方案1】:

我遇到了类似的问题。

我通过在工具>选项>调试>常规中取消选中“当异常跨越AppDomain或托管/本机边界时中断”来修复它

【讨论】:

碰巧我不再使用VS(我改用Rider),所以我无法测试它。也许其他人可以对其进行测试,因此如果可行,我可以将其标记为答案。 我试过这个解决方案,它确实解决了我的问题。【参考方案2】:

我通过在工具 > 选项 > 调试 > 常规中取消选中 Enable Just My Code 来修复它

【讨论】:

【参考方案3】:

我无法确认其他项目类型是否会发生这种情况,但在(Visual Studio Tools for Python)VSTP 中我始终会发生这种情况。

虽然不尽如人意,但它至少可以让异常安静下来,让你可以安心地继续工作,直到出现更好的解决方案。就我而言,调试我的代码几乎是不可能的,因为 StopIteration 在每次迭代中都会中断。

选择调试 > Windows > 异常设置s 或按 Ctrl-Alt-E。是的

右键单击窗口上的任意位置并选择显示列 > 附加操作。如果还没有,您将看到“其他操作”列。

右键单击您想要静音的特定异常或单击***复选框以选择整个异常类别,即 Python 异常。点击在用户代码中未处理时继续

对每个额外的异常或异常类别重复。

【讨论】:

碰巧我不再使用VS(我改用Rider),所以我无法测试它。也许其他人可以对其进行测试,因此如果可行,我可以将其标记为答案。 你觉得骑手怎么样?是不是很活泼?它是基于 JRE 的吗? 由于这主要是基于意见的,它并不完全属于这里,但我非常喜欢它,不知道它是否基于 JRE。【参考方案4】:

我知道这有点晚了,但是 ThreadAbortException 与所有其他异常不同,需要一些特殊处理,否则如果您实际上不处理它,它会在所有 catch 块的末尾自动重新抛出它应该被处理的方式。

【讨论】:

但我支持 MetaColon,当您在异常设置中禁用“抛出时中断”选项时,不应该有中断。

以上是关于VS 17 打破所有异常的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能让 QtCreator 打破异常?

在 VS2012 中切换“所有异常中断”的快速方法?

打破pydev中的异常

需要 C# 打破 Selenium 第一次机会异常

使用 Selenium 在 Chrome 中打破异常

VS 设置调试异常触发