无法读取try catch短语的异常

时间:2011-09-11 08:08:19

标签: c# visual-studio visual-studio-2008

我把我的代码放在try之间,像这样抓住

try
{
///
}
catch(Exception ex)
{
//here is where i set the break point
}

但当它进入捕获时我无法在快速监视窗口中读取ex,因为它表示它在当前上下文中不存在。 这是来自IDE本身吗?因为它发生在我工作的所有项目上。

6 个答案:

答案 0 :(得分:6)

您需要对异常实际执行某些操作。我相信这与编译器\调试器的一些优化有关。基本上,编译器\调试器将看到异常不再被引用\使用,并且它将不可用。做类似以下的事情

try
{
///
}
catch(Exception ex)
{
   //here is where i set the break point
   Console.WriteLine(ex);
}

答案 1 :(得分:2)

您正在发布模式下进行编译。在发布模式下,将删除未使用的变量尝试使用调试模式或使用ex执行某些操作(例如将其记录在某处,Console.WriteLine,或执行可能会混淆编译器的奇怪技巧)

GC.KeepAlive(ex);

编译器受到欺骗,并且不会优化ex。

答案 2 :(得分:1)

catch块中是否有代码?尝试在那里调用ex.ToString()并在其上设置断点。可能是编译器优化正在消除不执行任何操作的块。

答案 3 :(得分:1)

当我在捕获点上放置一个断点时,我得到了相同的结果,但当我进入括号时,我可以读取异常。确保括号中有代码:

        try
        {
            Convert.ToInt16("hoi");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.StackTrace);
        }

答案 4 :(得分:1)

您正在使用的Visual Studio Editor的哪个版本(std / pro / express)也有所不同? QuickWatch对话框可能并非在所有版本的VS IDE中都可用。请参阅下面的MSDN链接

http://msdn.microsoft.com/en-us/library/cyzbs7s2%28VS.80%29.aspx

答案 5 :(得分:0)

编译器处于调试模式,但我找出原因,因为有些人说这是关于代码优化的全部内容。 解决方案资源管理器>构建>取消选中“优化代码”复选框。 这是一个临时解决方案,因为我稍后会为我的应用程序生成日志。 谢谢大家的帮助,我真的很感激。