不能读取try catch phrase的例外

本文关键字:phrase catch 不能读 读取 try 不能 | 更新日期: 2023-09-27 18:08:08

我把代码放在try和catch之间,像这样

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

但是当它进入catch时,我无法在快速观察Windows中读取ex,因为它说它不存在于当前上下文中。这是从IDE本身吗??

不能读取try catch phrase的例外

您将需要实际处理异常。我相信这与编译器'调试器所做的一些优化有关。基本上,编译器'调试器将看到异常不再被引用'使用,并且它将不可用。执行如下命令

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

您正在以发布模式编译。在释放模式下,不使用的变量将被删除。尝试在调试模式下或对ex做一些事情(例如将其记录在控制台的某个地方)。写它,或者做一些可能会混淆编译器的奇怪的技巧)

GC.KeepAlive(ex);

编译器被欺骗了,它没有优化掉ex.

在catch块中有任何代码吗?尝试在那里调用ex.ToString()并设置断点。这可能是编译器优化正在消除不做任何事情的块。

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

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

您使用的Visual Studio编辑器的哪个版本(std/pro/express)也有所不同?QuickWatch对话框可能无法在所有版本的vside中使用。请参阅下面的MSDN链接

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

编译器处于调试模式,但我找到了原因,正如你们中的一些人所说,这都是关于代码的优化。解决方案资源管理器>构建>取消选中"优化代码"复选框。这是一个临时解决方案,因为我稍后将为我的应用程序创建日志。谢谢大家的帮助,我真的很感激。