2010-01-05 68 views
4

我正在使用调试器(vs2008)。Visual Studio 2008/2010 SP1,如何跳出一个catch?

一旦我进入catch语句,我想知道是否有任何方法将执行光标设置回try的开头。

只是拖动它似乎没有工作,是否有一些设置我需要改变?

例子:

try 
{ 
    //Want the cursor back here 
} 
catch 
{ 
    //some code, cursor is here... 
} 
+0

我和你有同样的问题 – 2011-04-05 06:23:14

+0

我已经更新了我的答案。显然它与32位和64位环境有关。 – Thorarin 2011-04-10 08:28:13

回答

2

显然,这取决于你所使用的.NET运行时的味道。在我第一次写这篇文章的时候,我尝试了它的时候效果很好,但是我正在使用我的工作电脑,安装了32位操作系统。

我使用此代码段进行测试:

try 
{ 
    throw new Exception(); 
} 
catch 
{ 
    Console.WriteLine("Error"); // Breakpoint here 
} 

你不能设置在try行的光标。它将在紧随其后的行之后(块声明的开始)。

将光标拖到该行或try行对我编译.NET程序for x86时正常工作。如果您正在运行32位操作系统,它也可以工作。但是,当你在64位环境和编译任何CPU或,您将收到以下错误消息:

Unable to set the next statement to this location. The attempt to unwind the callstack failed.

由于这是仅用于调试的目的,可能的解决方法是为x86编译,因此将使用32位运行时。转至Build菜单并选择配置管理器。在平台,请选择x86新...如果它目前不在列表中。在后一种情况下,你会得到一个新的对话框。挑选的选项,如下图所示,然后单击OK:

New Project Platform

+0

我不这么认为。当在catch块内时,我们不能跳回来尝试块 – 2011-04-05 04:59:58

+0

@Nam Gi VU:我已经做了更多的调查并更新了响应。这也许可以解释为什么当你遇到问题时,它为我工作。 – Thorarin 2011-04-10 08:08:42

1

如果我右击并执行“设置下一条语句”然后我得到了下面的错误对话框:

无法设置下一条语句到这个位置。解除调用堆栈的尝试失败。

平仓是不可能在下列情况:

  1. 调试经刚刚在实时调试开始。
  2. 放松正在进行中。
  3. System.StackOverflowException或System.Threading.ThreadAbortException异常已被引发。

通过消除不能移动光标(与设置下一条语句相同)的原因必须是#2。

+0

“放松”究竟是什么。请向我解释。谢谢! – 2011-04-05 06:28:45

+0

@Nam看到[这个问题](http://stackoverflow.com/questions/2005606/net-what-is-an-unwind),这实际上是由我的问题,因为这个答案! :-) – Justin 2011-04-05 06:54:52

+0

可爱。我将把你的问题作为其余的模板,如果你没有问及即时调试和不能跳回异常的原因 – 2011-04-06 09:34:51