Visual Studio .NET调试器的“隐藏的秘密”?

时间:2008-09-25 03:06:32

标签: visual-studio debugging

尽管我一般不喜欢SO上的讨论/主观帖子,但我真的很欣赏人们放在一起的“Hidden Secrets”帖子。它们提供了您可能现在发现的一些常见错过的工具的概述。

对于这个问题,我想探索Visual Studio .NET调试器。你经常使用或最近发现的VS.NET调试器中有哪些“隐藏的秘密”,希望你早就知道它们?

14 个答案:

答案 0 :(得分:22)

我最喜欢的功能之一是断点上可用的"When Hit..."选项。您可以使用变量的值以及许多其他信息打印消息,例如:

  • $ADDRESS - 当前说明
  • $CALLER - 上一个功能名称
  • $CALLSTACK - 调用堆栈
  • $FUNCTION - 当前功能名称
  • $PID - 进程ID
  • $PNAME - 流程名称
  • $TID - 主题ID
  • $TNAME - 主题名称

您也可以让它运行宏,但我从未使用过该功能。

答案 1 :(得分:18)

对于.net应用程序System.Diagnostics有很多有用的调试内容。例如Debugger类:

Debugger.Break(); // Programmatically set a break point
Debugger.Launch(); // Launch the debugger if not already attached
Debugger.IsAttached // Check if the debugger is attached

System.Diagnostics也有很多好的属性。我使用的两个是调试器显示属性,用于更改放入本地窗口的详细信息,以及用于跳过不关心调试的代码的逐步属性:

// Displays the value of Property1 for any "MyClass" instance in the debugger
[DebuggerDisplay("{Property1}")]
public class MyClass {
    public string Property1 { get; set; }

    [DebuggerStepThrough]
    public void DontStepInto() {
       // An action we don't want to debug
    }
}

答案 2 :(得分:18)

您可以右键单击Watch窗口中的对象,然后单击Make Object ID。

它将为该实例分配一个ID号,允许您在复杂的对象图中查看哪些对象引用同一个实例。

答案 3 :(得分:11)

作为一名Web开发人员,他使用与我的前端代码在同一解决方案中的Web服务,我发现"attach" to a process能够节省大量时间。

在我找到这个隐藏的gem之前,我总是要在一些调用Web服务方法的前端代码上设置一个断点并进入它。现在我知道了这个技巧/功能,我可以轻松地在我想要的代码的任何部分设置断点,这样可以节省大量的时间和精力。

答案 4 :(得分:9)

监视窗口中的

$exception将显示当前正在处理的异常,即使您没有将Exception实例分配给命名变量的catch。

答案 5 :(得分:9)

  • 线程窗口,来自Debug - > Windows - >线程。您可以冻结和解冻线程,并切换活动线程。在使用多线程应用程序调试或复制问题时,这非常棒。
  • 你可以拖动&将黄色“Next Statement”箭头放到另一个地方。程序恢复后,将在该语句中恢复执行。您可以将其添加到工具栏中,这是一个名为Set Next Statement的蓝色箭头,但默认情况下它不存在。
  • 您可以“撤消”您所做的导航,例如滚动,转到其他文件或跳转到参考。快捷方式是ctrl--(控制减去。)这样你可以跳转到一个函数,检查那里的代码,然后回到你原来的地方而不看。

答案 6 :(得分:8)

答案 7 :(得分:7)

您可以将windbg扩展加载到Visual Studio调试器中,并从即时窗口中使用它们。

答案 8 :(得分:6)

正如另一篇文章中所述,Sara Ford正在VS调试器上进行当前系列。

她的博客是VS提示的最佳来源:http://blogs.msdn.com/saraford/archive/tags/Visual+Studio+2008+Tip+of+the+Day/default.aspx

答案 9 :(得分:5)

这是一种旧的。如果添加监视表达式err,hr,则会保存GetLastError()的结果,格式为HRESULT(仅限VC ++调试器)。

答案 10 :(得分:5)

执行暂停时,您可以在代码中上下拖动当前行光标(黄色箭头)。

此外,为了在异常暂停期间启用此功能,您必须先在异常详细信息上单击“启用编辑”。

您还可以通过在以下情况下检查感兴趣的内容,使VS中断处理的异常: Debug-> Exceptions:Thrown column

答案 11 :(得分:4)

一些有用的快捷键。

  • F11进入方法。
  • Shift-F11退出方法。
  • F10跳过某个方法。

答案 12 :(得分:4)

我经常使用的东西:

  • 单击菜单项“Debug | Exceptions”(或简称Ctrl-D,E),您可以在抛出任何异常时启用中断,或选择不中断某些异常。

  • 您可以设置调试器从MS服务器下载一些框架源代码和符号,然后进入框架代码。 (有些库,如System.ServiceModel,尚不可用)。它位于Debugging下的Options窗口中。请参阅MSDN How-To

  • 您可以使用VS.NET调试器来调试在IE中运行的Javascript。您只需要安装IE javascript调试器,并在IE的设置中启用javascript调试。然后在JS错误上会弹出“你想调试”对话框,你可以选择在VS.NET中调试。

答案 13 :(得分:1)

如果文件属于另一个解决方案(外部文件),则可以在源文件中打开并放置断点。调试器仍然可以达到断点。无需打开另一个Visual Studio实例来调试外部文件。有助于调试您提供的Web服务。只要所有源都是最新的并且已编译,这就可以工作。