如何临时禁用所有的try/catch块?

29

有没有可能像点击一个按钮一样轻松地停用/启用整个项目中的所有try catch块?

我需要在调试时使用此功能,当我不想让catch块处理异常时,而是希望VS打断代码,就好像try catch块不存在一样。

目前,我正在注释try / catch块,但这很低效。

环境:使用C#语言的VS 2008。


目的是什么?为什么你想要这样做? - shahkalpesh
17
你们为什么对别人问问题感到如此不安?如果你等五分钟,你会发现有人给出了一个有用的答案,而你并没有预料到。 - DOK
5个回答

43

为了在抛出异常的第一时间捕获它们(在Win32中称为“first-chance exceptions”):

  • 在VS2008中:转到调试(Debug)异常(Exceptions)...

  • 在VS2015中:此功能已移至调试(Debug) > 窗口(Windows) > 异常设置(Exception Settings)

然后勾选Common Language Runtime Exceptions下的Thrown框。

enter image description here


3
我相信禁用所有try-catch就可以达到原帖想要实现的目的。 - WSBT

17

无法停用try/catch块。

但是,为了调试目的,如果您想在特定类型的异常被抛出时立即中断程序,您可以让Visual Studio来实现这一点(Debug -> Exceptions; 选择您感兴趣的异常类型并选中“Thrown”框)。


1
我有一个理由:需要抑制大量的错误信息(客户对所有类型的 .net 错误页面都过敏),并且在几个月后开发额外部分时需要调试页面。 - dvdmn
这可能是一个边缘情况,但我现在处于这样的情况:必须在同一代码库中针对Excel 2007和2013进行开发,这意味着我必须使用VS2012。这也意味着我必须使用编译代码来调试针对Excel 2013的代码,因为VS2012无法附加到Excel 2013以进行调试。我现在很想快速禁用我的try/catch块... - squillman
@squillman:我完全不明白“针对Excel 2007和2013进行开发”与禁用try/catch块有什么关系... - Jon Skeet
是的,我肯定可以更好地解释。我有一个插件需要在2007和2013中工作,所以我必须在VS2012中开发。我遇到了一个异常,但只在Excel 2013中出现,而我无法进行调试。糟糕编码的catch块使得很难找到真正的异常是什么以及在哪里。 - squillman
但是再次强调,这只是一个边缘情况,也不是R#或任何人很快就会提出禁用Try/Catch功能的好理由。 - squillman

4

今天我思考了一下,找到了另一种解决方案。这种方法的优点是IDE将在异常发生的确切位置停止。

全局某处定义:

Namespace Global.System
  Public Class NeverOccurException
    Inherits Exception
  End Class
End Namespace

在每个源代码文件的开头:

#If DEBUG
  Imports CatchAtReleaseException = System.NeverOccurException
#Else
  Imports CatchAtReleaseException = System.Exception
#End If

使用方法:

  'Compiled in DEBUG-Mode the TryCatch is "disabled", because the
  'the ALIAS CatchAtReleaseException is set to "NeverOccurException"

  'Compiled as RELEASE the TryCatch is "enabled", because the ALIAS
  'is set to the regular "System.Exception"

  Public Sub SampleSub()
    Try
      '...
    Catch ex As CatchAtReleaseException
    End Try
  End Sub

玩得开心, 问候, 泰德


2

如果您想在IDE中进行操作,可以通过Debug -> Exceptions对话框来设置当特定/类别/所有异常被抛出时,让IDE停止运行。


1

您可以更改 Visual Studio 在异常发生时中断的方式。默认情况下,它会在未处理的异常上中断。如果您转到“调试”菜单>“异常”,则可以取消选中“公共语言运行时异常”并在 IDE 处理异常时进行其他更改。例如,您可以让它仅在一种异常上中断;那里有一个很长的列表。

我在尝试调试时偶尔会这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接