Visual Studio .NETdebugging器的“隐藏的秘密”?

尽pipe我一般不喜欢SO的讨论/主观post,但我真的明白了人们放在一起的“隐藏的秘密”。 他们提供了一些您可能会发现的常见工具的概述。

对于这个问题,我想探索Visual Studio .NETdebugging器。 什么是VS.NETdebugging器中的一些“隐藏的秘密”,你经常或最近发现,希望你早就知道?

我最喜欢的function之一是在断点上可用的“当…命中…”选项。 您可以使用variables的值以及许多其他信息打印消息,例如:

  • $ADDRESS – 当前指令
  • $CALLER – 上一个函数名称
  • $CALLSTACK – 调用堆栈
  • $FUNCTION – 当前函数名称
  • $PID – 进程ID
  • $PNAME – 进程名称
  • $TID – 线程标识
  • $TNAME – 线程名称

你也可以让它运行一个macros,但我从来没有使用过这个function。

您可以在“监视”窗口中右键单击某个对象,然后单击“创build对象ID”。

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

对于.net应用程序System.Diagnostics有很多有用的debugging工具。 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也有很多好的属性。 我使用的两个是debugging器显示属性,用于更改放置在本地窗口中的详细信息以及用于跳过不关心debugging的代码的跳过属性:

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

作为一名Web服务开发人员,他们大多数时间和我的前端代码处于相同的解决scheme中,我发现“附加”到一个进程是一个巨大的节省时间的能力。

在我发现这个隐藏的gem之前,我总是必须在一些调用web服务方法的前端代码上设置一个断点,然后进入它。 现在,我知道这个技巧/function,我可以很容易地在我的代码的任何部分设置断点,这为我节省了大量的时间和精力。

监视窗口中的$exception将显示当前正在处理的exception,即使您没有将Exception实例分配给指定variables的catch也是如此。

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

条件断点 。

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

正如另一篇文章中所发布的,Sara Ford正在做一个关于VSdebugging器的最新系列。

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

这是一个旧的。 如果添加监视expression式err,hr ,那么这将保存GetLastError()的结果,格式化为HRESULT(仅限VC ++debugging器)。

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

此外,为了在exception暂停期间启用此function,您必须先点击“启用编辑”。

你也可以通过在下面debugging感兴趣的对象来使VS处理exception:Debug-> Exceptions:Thrown column

一些有用的快捷键。

  • F11进入一个方法。
  • Shift-F11退出方法。
  • F10来切换一个方法。

我经常使用的东西:

  • 单击菜单项“Debug | Exceptions”(或简称Ctrl-D,E),可以在引发exception时启用中断,或者在某些exception情况下select不中断。

  • 您可以设置debugging器从MS服务器下载一些框架源代码和符号,并进入框架代码。 (一些库,如System.ServiceModel,尚不可用)。 它在“debugging”下的“选项”窗口中。 请参阅MSDN如何 。

  • 您可以使用VS.NETdebugging器来debugging运行在IE中的Javascript。 你只需要安装IE javascriptdebugging器,并在IE的设置中启用javascriptdebugging。 然后在一个JS错误,它会popup一个“你想debugging”对话框,你可以select在VS.NETdebugging。

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