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

34

尽管我通常不喜欢SO上的讨论/主观性帖子,但我真的很欣赏人们编写的“隐藏秘密”系列文章。它们为您提供了一些常被忽视的工具的概述,这些工具您可能从未发现。

对于这个问题,我想探讨Visual Studio .NET调试器。您经常使用或最近发现并希望早些知道的VS.NET调试器中的一些“隐藏秘密”是什么?

14个回答

22
我最喜欢的功能之一是可在断点上使用的"When Hit..."选项。您可以打印带有变量值和其他大量信息的消息,例如:
  • $ADDRESS - 当前指令
  • $CALLER - 上一个函数名称
  • $CALLSTACK - 调用堆栈
  • $FUNCTION - 当前函数名称
  • $PID - 进程ID
  • $PNAME - 进程名称
  • $TID - 线程ID
  • $TNAME - 线程名称
您还可以让它运行宏,但我从未使用过该功能。

18

您可以在 Watch 窗口中右键单击对象,然后点击“创建对象 ID”。

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


6
最重要的是,它可以展示对象的内容,即使它不在当前的调用栈中。你需要在监视窗口底部的空行中输入对象的ID(例如:"1#")。请注意,在翻译过程中不要改变原文意思,也不要添加解释。 - Joel in Gö

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
    }
}

11
作为一名与大部分时间内与前端代码在同一个解决方案中的 Web 开发人员,我发现 "附加到进程" 的功能能够极大地节约时间。
在我发现这个隐藏的宝藏之前,我总是需要在调用 Web 服务方法的前端代码上设置断点并逐步执行。现在我知道了这个技巧/功能,我可以轻松地在任何想要的代码部分设置断点,这为我节省了大量的时间和精力。

1
对于桌面应用程序,我发现在无法设置断点的区域中添加消息框或线程休眠非常有帮助,然后在那里附加到进程。 - Jordan Parmer
3
如果你能添加 MessageBox,那就意味着你可以添加代码,也就意味着你可以使用 Debugger.Break() 来编程性地设置断点。 - Abel

10

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


9
无需将其放入手表中,它会自动显示在本地窗口的第一项。 - Robert Giesecke

9
  • 从调试 -> 窗口 -> 线程可以打开线程窗口。您可以冻结、解冻线程,并切换活动线程。在调试或复制多线程应用程序的问题时非常有用。
  • 您可以拖放黄色的“下一条语句”箭头到另一个位置。当程序恢复时,它将在该语句处继续执行。您可以将其添加到工具栏中,称为“设置下一条语句”的蓝色箭头,但默认情况下不会显示。
  • 您可以“撤消”您所做的导航,如滚动、转到另一个文件或跳转到引用。快捷键是ctrl--(控制减号)。这样,您就可以跳转到一个函数,检查其中的代码,并返回到之前的位置而无需查找。

1
对于第二点,您还可以右键单击代码行并选择“设置下一条语句”,它将把执行点移动到该行。 - CodingWithSpike
1
使用 Ctrl--Ctrl-Shift-(Ctrl-Minus、Ctrl+Shift-Minus)是 向后/向前导航 的键盘快捷方式,也可以添加到工具栏中。它们与调试无关,并且始终可以在 Visual Studio 中使用。 - Abel

8

7

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


6

5

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

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

您还可以通过在以下位置选中感兴趣的异常类型:Debug->Exceptions : Thrown column,使VS在处理异常时中断。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接