【问题标题】:Break at throw for exception that is caughtBreak at throw 捕获的异常
【发布时间】:2009-01-06 23:28:17
【问题描述】:

在 VS 调试器中,未捕获的异常会导致程序在异常被抛出(或足够接近)时中断,并且处于可让您查看所有堆栈帧和直到该点的局部变量的状态.

有没有办法获得相同的结果(抛出时中断)但在特定点捕获异常?我对所有异常甚至给定类型的所有异常都不感兴趣(这可能会很快变得无用),但如果我可以为单个 try 或 catch 块执行此操作,我会很高兴

有点相关:

【问题讨论】:

  • 请澄清:您是否想让调试器在未处理的异常上停止,但仅在某些方法中?或者你想在你的 catch 块内停下来?
  • @jcollum,下界。我希望调试器在抛出点停止,但前提是要在给定位置捕获异常。
  • 导致异常的位置应该在你的堆栈跟踪中(不是 100%,但是)。这是你能得到的最好的。

标签: c# visual-studio exception-handling debugging


【解决方案1】:

Debug -> Exceptions 对话框是否符合您的要求?您可以选择哪些异常会导致 VS 中断,无论它们是否被捕获。我不知道如何仅针对代码的特定部分执行此操作,仅基于抛出的异常类型。

【讨论】:

  • 不是每个异常类(如果我没看错的话)我想要在给定位置捕获的任何东西。
  • 可悲的是,当任何东西被扔到某个位置时,我不知道有什么方法可以破坏。不过,我绝对可以看到它会派上用场。
【解决方案2】:

是的,您应该能够在 catch 块的最后一个大括号上放置一个断点。或者如果您要重新投掷,请使用 throw 命令。

如果您只需要在某个方法内的任何异常上设置断点,请重新抛出。

try {  }
catch (Exception exc)
{ 
   throw;  // <-- breakpoint here
} 

编辑:我曾经习惯在几乎所有异常上放置断点。一旦我到达大约 25 个断点,就会发现这会大大减慢调试器的速度。可能只与 VS2005 相关。

Edit2:导致异常的位置应该在 exc 对象的 StackTrace 中。

【讨论】:

  • 我认为这行不通,因为在堆栈展开到那个点后它会中断。 :(
  • BCS:暂停“投掷”?没有其他方法可以做他想要的 AFAIK。
  • 如果您知道异常将在哪里引发,只需在该部分代码周围放置一个 try/catch 块,然后 jcollum 在他的回答中所说的 ndo。这行得通吗?
猜你喜欢
  • 2010-12-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多