尽管我通常不喜欢SO上的讨论/主观性帖子,但我真的很欣赏人们编写的“隐藏秘密”系列文章。它们为您提供了一些常被忽视的工具的概述,这些工具您可能从未发现。
对于这个问题,我想探讨Visual Studio .NET调试器。您经常使用或最近发现并希望早些知道的VS.NET调试器中的一些“隐藏秘密”是什么?
尽管我通常不喜欢SO上的讨论/主观性帖子,但我真的很欣赏人们编写的“隐藏秘密”系列文章。它们为您提供了一些常被忽视的工具的概述,这些工具您可能从未发现。
对于这个问题,我想探讨Visual Studio .NET调试器。您经常使用或最近发现并希望早些知道的VS.NET调试器中的一些“隐藏秘密”是什么?
$ADDRESS
- 当前指令$CALLER
- 上一个函数名称$CALLSTACK
- 调用堆栈$FUNCTION
- 当前函数名称$PID
- 进程ID$PNAME
- 进程名称$TID
- 线程ID$TNAME
- 线程名称您可以在 Watch 窗口中右键单击对象,然后点击“创建对象 ID”。
这将为该实例分配一个 ID 号,使您能够在复杂的对象图中查看哪些对象引用同一实例。
对于 .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
}
}
Debugger.Break()
来编程性地设置断点。 - Abel$exception
在监视窗口中会显示当前正在处理的异常,即使您没有使用catch将Exception
实例分配给命名变量。
Ctrl--
和 Ctrl-Shift-
(Ctrl-Minus、Ctrl+Shift-Minus)是 向后/向前导航 的键盘快捷方式,也可以添加到工具栏中。它们与调试无关,并且始终可以在 Visual Studio 中使用。 - Abel您可以将Windbg扩展加载到Visual Studio调试器中,并从即时窗口中使用它们。
如同在另一帖子中提到的一样,Sara Ford正在就VS调试器进行系列讲解。
她的博客是关于VS技巧最好的来源:http://blogs.msdn.com/saraford/archive/tags/Visual+Studio+2008+Tip+of+the+Day/default.aspx
当执行暂停时,您可以拖动当前行光标(黄色箭头)上下移动代码。
此外,在异常暂停期间启用此功能,您必须首先在异常详细信息上单击“启用编辑”。
您还可以通过在以下位置选中感兴趣的异常类型:Debug->Exceptions : Thrown column,使VS在处理异常时中断。