【发布时间】:2010-09-12 23:24:09
【问题描述】:
尽管我通常不喜欢关于 SO 的讨论/主观帖子,但我真的很欣赏人们放在一起的“隐藏的秘密”帖子集。它们很好地概述了您现在可能会发现的一些经常遗漏的工具。
对于这个问题,我想探索 Visual Studio .NET 调试器。 VS.NET 调试器中有哪些您经常使用或最近发现并希望您早就知道的“秘密”?
【问题讨论】:
尽管我通常不喜欢关于 SO 的讨论/主观帖子,但我真的很欣赏人们放在一起的“隐藏的秘密”帖子集。它们很好地概述了您现在可能会发现的一些经常遗漏的工具。
对于这个问题,我想探索 Visual Studio .NET 调试器。 VS.NET 调试器中有哪些您经常使用或最近发现并希望您早就知道的“秘密”?
【问题讨论】:
如果文件属于另一个解决方案(外部文件),您可以在源文件中打开并放置断点。调试器仍然可以命中断点。无需打开另一个 Visual Studio 实例来调试外部文件。有助于调试您获取的 Web 服务。只要所有源代码都是最新且已编译,此方法就可以工作。
【讨论】:
您可以在暂停执行时上下拖动当前行光标(黄色箭头)。
此外,为了在异常暂停期间启用此功能,您必须先在异常详细信息上单击“启用编辑”。
您还可以通过检查以下内容来使 VS 中断已处理的异常: 调试->异常:抛出的列
【讨论】:
对于.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
}
}
【讨论】:
我最喜欢的功能之一是断点上的"When Hit..." 选项。您可以打印带有变量值的消息以及许多其他信息,例如:
$ADDRESS - 当前指令$CALLER - 以前的函数名称$CALLSTACK - 调用堆栈$FUNCTION - 当前函数名称$PID - 进程 ID$PNAME - 进程名称$TID - 线程 ID$TNAME - 线程名称你也可以让它运行一个宏,但我从来没有使用过这个功能。
【讨论】:
我经常使用的东西:
单击菜单项“Debug | Exceptions”(或简称 Ctrl-D、E),您可以在抛出任何异常时启用中断,或选择在某些异常上不中断。
您可以设置调试器以从 MS 服务器下载一些框架源代码和符号,然后单步执行框架代码。 (一些库,如 System.ServiceModel,尚不可用)。它在调试下的选项窗口中。见MSDN How-To。
您可以使用 VS.NET 调试器来调试在 IE 中运行的 Javascript。您只需要安装 IE javascript 调试器,并在 IE 的设置中启用 javascript 调试。然后在出现 JS 错误时会弹出“是否要调试”对话框,您可以选择在 VS.NET 中调试。
【讨论】:
您可以在 Watch 窗口中右键单击一个对象,然后单击 Make Object ID。
它将为该实例分配一个 ID 号,使您可以在复杂的对象图中查看哪些对象引用同一实例。
【讨论】:
【讨论】:
Ctrl-- 和 Ctrl-Shift- (Ctrl-Minus, Ctrl+Shift-Minus) 是 Navigate Back/Forward 的键盘快捷键,可以添加到工具栏也是。但是,它们与调试无关,并且始终可以在 Visual Studio 中使用。
正如在另一篇帖子中发布的那样,Sara Ford 正在 VS 调试器上进行当前系列。
她的博客是 VS 技巧的最佳来源:http://blogs.msdn.com/saraford/archive/tags/Visual+Studio+2008+Tip+of+the+Day/default.aspx
【讨论】:
您可以将 windbg 扩展加载到 Visual Studio 调试器中并从即时窗口中使用它们。
【讨论】:
这是一种旧的。如果您添加一个监视表达式err,hr,那么它将保存 GetLastError() 的结果,格式为 HRESULT(仅限 VC++ 调试器)。
【讨论】:
作为一名 Web 开发人员,我大部分时间都在使用与我的前端代码在同一解决方案中的 Web 服务,我发现"attach" to a process 的功能可以节省大量时间。
在我找到这个隐藏的宝石之前,我总是必须在一些调用 Web 服务方法的前端代码上设置断点并单步执行。现在我知道了这个技巧/功能,我可以轻松地在我想要的代码的任何部分设置断点,这节省了我大量的时间和精力。
【讨论】:
Debugger.Break()以编程方式设置断点。
【讨论】:
一些有用的快捷键。
F11 进入方法。Shift-F11 退出方法。F10 跳过一个方法。【讨论】:
监视窗口中的$exception 将显示当前正在处理的异常,即使您没有将Exception 实例分配给命名变量的catch。
【讨论】: