【问题标题】:"Hidden Secrets" of the Visual Studio .NET debugger? [closed]Visual Studio .NET 调试器的“隐藏的秘密”? [关闭]
【发布时间】:2010-09-12 23:24:09
【问题描述】:

尽管我通常不喜欢关于 SO 的讨论/主观帖子,但我真的很欣赏人们放在一起的“隐藏的秘密”帖子集。它们很好地概述了您现在可能会发现的一些经常遗漏的工具。

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

【问题讨论】:

    标签: visual-studio debugging


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      您还可以通过检查以下内容来使 VS 中断已处理的异常: 调试->异常:抛出的列

      【讨论】:

        【解决方案3】:

        对于.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
            }
        }
        

        【讨论】:

          【解决方案4】:

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

          • $ADDRESS - 当前指令
          • $CALLER - 以前的函数名称
          • $CALLSTACK - 调用堆栈
          • $FUNCTION - 当前函数名称
          • $PID - 进程 ID
          • $PNAME - 进程名称
          • $TID - 线程 ID
          • $TNAME - 线程名称

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

          【讨论】:

            【解决方案5】:

            我经常使用的东西:

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

            • 您可以设置调试器以从 MS 服务器下载一些框架源代码和符号,然后单步执行框架代码。 (一些库,如 System.ServiceModel,尚不可用)。它在调试下的选项窗口中。见MSDN How-To

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

              • 最重要的是,它会显示对象的内容即使它不在当前调用堆栈中。您必须在监视窗口底部的空行中输入 ID(例如“1#”)。
              【解决方案7】:
              • 线程窗口,从调试 -> 窗口 -> 线程。您可以冻结和解冻线程,并切换活动线程。这在调试或复制多线程应用程序的问题时非常棒。
              • 您可以将黄色的“下一个语句”箭头拖放到另一个位置。当程序恢复时,它将在该语句处恢复执行。您可以将它添加到工具栏中,一个名为 Set Next Statement 的蓝色箭头,但默认情况下不存在。
              • 您可以“撤消”您所做的导航,例如滚动、转到另一个文件或跳转到参考。快捷方式是 ctrl--(控制减号)。这样您就可以跳转到一个函数,检查那里的代码,然后不看就回到原来的位置。

              【讨论】:

              • 到点#2,你也可以在一行代码上右击选择“设置下一条语句”,它会将执行点移动到该行。
              • Using Ctrl--Ctrl-Shift- (Ctrl-Minus, Ctrl+Shift-Minus) 是 Navigate Back/Forward 的键盘快捷键,可以添加到工具栏也是。但是,它们与调试无关,并且始终可以在 Visual Studio 中使用。
              【解决方案8】:

              正如在另一篇帖子中发布的那样,Sara Ford 正在 VS 调试器上进行当前系列。

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    【解决方案11】:

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

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

                    【讨论】:

                    • 对于桌面应用程序,我发现在无法断点的区域中放入消息框或线程睡眠然后附加到那里的进程非常有用。
                    • @j0rd4n:如果可以添加MessageBox,说明可以添加代码,也可以使用Debugger.Break()以编程方式设置断点。
                    【解决方案12】:

                    【讨论】:

                      【解决方案13】:

                      一些有用的快捷键。

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

                      【讨论】:

                        【解决方案14】:

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

                        【讨论】:

                        • 无需放入手表,它会自动显示为本地窗口中的第一项。
                        猜你喜欢
                        • 2011-05-04
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-03-15
                        • 2015-06-11
                        • 1970-01-01
                        相关资源
                        最近更新 更多