【问题标题】:How to see exception detail in debugger without assigning variable to exception?如何在调试器中查看异常详细信息而不将变量分配给异常?
【发布时间】:2013-04-03 07:53:30
【问题描述】:

我想在 Visual Studio 调试器中查看异常详细信息,而无需将变量分配给异常。目前我必须写这样的东西:

try 
{
    //some code
}
catch (SecurityException ex)
{
   //some code or ever no any code 
}

Visual Studio 抛出一个错误,表明 ex 变量从未被使用,但我需要这个变量来在调试时查看异常详细信息。

更新:我知道如何抑制 VS 错误“从不使用变量”,问题是在没有这个变量的情况下看到异常。


@VladimirFrolov 的 $exception 变量或@MarcGravell 的异常助手是一个答案。

【问题讨论】:

  • 添加 throw ex;在你的捕获?或 Console.WriteLine(ex.getMessage());或任何其他值

标签: c# visual-studio exception


【解决方案1】:

您可以在本地列表中查看您的例外情况或在观察列表中使用$exception

try
{
    // some code
}
catch (SecurityException)
{ // place breakpoint at this line
}

【讨论】:

  • 对于 VS.NET 2017 仍然如此吗?似乎不适用于 vs2017
  • @FrederikGheysels,我总是在 VS2017 中使用$exception,它工作得很好。
  • 在 VS 2019 中仍然有效。出色的解决方案;但非常模糊:VS 确实可以通过在鼠标悬停上显示一些线索来改进这一点。
【解决方案2】:

您无需执行任何操作:只需在 catch 内放置一个断点(或在 catch 上并单步进入该块),您应该会看到查看异常帮助程序的邀请。这适用于裸 catch 或特定类型的 catch(SecurityException) 块:

给你一切:

【讨论】:

  • 我对这个对话框的问题是如果“数据”集合中有消息,我似乎无法通过这个对话框查看它们。有办法吗?
  • Visual Studio 2015 是否可能不再具有此功能?至少它只是进入catch 块而不提供任何帮助,就像任何其他代码行一样,无论我将断点放在哪里。
  • @Andrew 这也是我所看到的。我在这里问过:stackoverflow.com/questions/47872167/…
  • 这个功能曾经在旧的 VS 版本中工作,但现在它在 VS 2015 中停止工作。也许有办法重新激活它。我很高兴了解到 $exception 是一种不太方便但非常有用的替代方案。
【解决方案3】:

当您遇到异常时,您可以随时检查监视窗口并添加变量:$exception。 这将使您能够处理所有异常元数据。

【讨论】:

    【解决方案4】:

    您可以使用 Visual Studio 中的功能。

    调试 => 异常 => 检查“公共语言运行时异常”

    就是这样。希望对您有所帮助。

    【讨论】:

      【解决方案5】:

      使用

      catch (SecurityException /*without variable*/)
      {/*break Point*/
         //some code or ever no any code 
      }
      

      catch /*without parameter*/
      {/*break Point*/
         //some code or ever no any code 
      }
      

      但我认为这就是你的意思

      catch (SecurityException ex)
          {
             MessageBox.Show(ex.ToString()); //for Winforms
             Console.WriteLine(ex); //for console
          }
      

      【讨论】:

        【解决方案6】:

        随便写

         catch
        {//set breakpoint here
        }
        

        【讨论】:

          【解决方案7】:

          为避免在 catch 语句中收到警告:“变量 'ex' 已声明但从未使用”,请执行以下操作:

           try
           {
           }
           catch (Exception)
           {
             // set break point 
           }
          

          或使用System.Diagnostics.Debug.WriteLine() 或启用跟踪或调试以使用trace listener

          【讨论】:

          • 你知道这不是丹妮拉要问的,对吧?
          • 这甚至不是试图回答所提出的问题。
          猜你喜欢
          • 1970-01-01
          • 2018-03-30
          • 2013-01-10
          • 1970-01-01
          • 2022-07-22
          • 2011-03-20
          • 1970-01-01
          • 1970-01-01
          • 2013-10-08
          相关资源
          最近更新 更多