【问题标题】:How to set conditional breakpoints in Visual Studio?如何在 Visual Studio 中设置条件断点?
【发布时间】:2011-07-12 20:08:13
【问题描述】:

有没有简单的方法在 Visual Studio 中设置条件断点?

如果我只想在变量的值变为某个值时才下断点,我该怎么做?

【问题讨论】:

  • 请注意,Express 版没有此功能。
  • 我使用的是 Express 2015,它具有条件断点功能
  • 2017社区版也有条件断点

标签: c# .net visual-studio breakpoints


【解决方案1】:

像往常一样设置断点。右键单击它。点击条件。

【讨论】:

  • 在 VS 2015 中,您需要将鼠标悬停在断点上并单击齿轮图标来设置条件
  • 你的意思是,右键单击,设置条件,得到“断点条件失败”错误..不是吗?
  • 答案还应包括条件语句的语法或信息链接。
【解决方案2】:

当你使用 Express 版时,你可以试试这个:

#if DEBUG
    if( fooVariable == true )
        System.Diagnostics.Debugger.Break();
#endif

if 语句确保在发布版本中不存在断点。

【讨论】:

  • 这具有很大的性能/省时优势。我在我的一个程序(只有大约 350 万个)中迭代每个潜在的 int 'id',这只需要几秒钟。我试图使用条件断点,但由于它不在条件分支中,它降低了执行速度,几分钟后我将终止调试会话。使用编译的断点使其瞬间完成。
【解决方案3】:

Visual Studio 为条件断点提供了很多选项:

要设置这些中的任何一个

  1. 设置断点。
  2. 在断点上单击鼠标右键,然后在弹出菜单中选择适合您的选项。

这些选项如下:

  • 您可以根据您提供的代码表达式设置条件(从弹出菜单中选择Condition)。例如,您可以指定 foo == 8 或其他表达式。
  • 您可以让断点在被击中一定次数后触发。 (从弹出菜单中选择命中计数)。这是一个有趣的选择,因为您实际上并不局限于打破特定的命中数,但您也可以选择其他一些场景。我将留给您探索可能性。
  • 您可以在进程 ID、线程 ID 和机器名称上设置过滤器(从弹出菜单中选择 过滤器)

【讨论】:

    【解决方案4】:

    只是另一种方式,(或者如果您使用的是 express)在代码中添加条件:

    if(yourCondition)
    {
        System.Diagnostics.Debugger.Break();
    }
    

    【讨论】:

      【解决方案5】:
      1. 在行上设置断点
      2. 右击红球
      3. 选择条件断点
      4. 设置条件

      【讨论】:

        【解决方案6】:

        写出实际情况可能比较棘手,所以我倾向于

        1. 设置常规断点。
        2. 运行代码直到第一次命中断点。
        3. 使用即时窗口(调试 > 窗口 > 即时)测试您的表达式。
        4. 右键单击断点,单击条件并粘贴您的 表达。

        使用即时窗口的优势:

        • 它具有 IntelliSense。
        • 当计算表达式时,您可以确定表达式中的变量在范围内。
        • 您可以确定您的表达式返回真或假。

        当代码引用名称为“Setting”的表时,此示例会中断:

        table.GetTableName().Contains("Setting")
        

        【讨论】:

          【解决方案7】:

          照常创建断点,右击红点,选择“条件”。

          【讨论】:

            【解决方案8】:

            在 Visual Studio 6.0 上

            Alt+F9!!!

            【讨论】:

            • -1) 这在 VS 2012 中不起作用 2) 这个问题已经有很多其他(更好的)答案和 3) 到底谁关心 VS 6.0(1998 年发布)? 4)即使有人关心 VS 6,这个问题也被标记为 .Net,直到下一个版本的 VS(Visual Studio .Net)才得到支持
            • 好吧,其他答案在 VS 6.0 上不起作用。所以我发布了一个解决方案。
            【解决方案9】:
            1. 照常设置断点
            2. 右键单击断点并选择条件
            3. 您将看到一个显示“断点条件”的对话框
            4. 在字段中添加条件,例如"i==5"

            只有在 i 为 5 时才会触发断点。

            【讨论】:

              【解决方案10】:
              1. 照常设置断点。
              2. 右键单击断点标记
              3. 点击“条件...”
              4. 写一个条件,你可以使用变量名
              5. 选择“是真的”或“已更改”

              【讨论】:

                【解决方案11】:

                像往常一样设置breakpoint,右键单击断点并选择condion选项并设置你的条件。

                【讨论】:

                  【解决方案12】:

                  创建条件函数断点:

                  1. 在“断点”窗口中,单击“新建”以创建新断点。

                  2. 在“函数”选项卡上,为“函数”键入 Reverse。输入 1 作为 Line,输入 1 作为 Character,然后将 Language 设置为 Basic。

                  3. 单击条件并确保选中条件复选框。输入 instr.length > 0 作为 Condition,确保选中 is true 选项,然后单击 OK。

                  4. 在“新建断点”对话框中,单击“确定”。

                  5. 在“调试”菜单上,单击“开始”。

                  【讨论】:

                    【解决方案13】:

                    如果您来自 Google,那么此答案可能就是您要搜索的内容。

                    1. 点击调试>新建断点>函数断点

                    2. 这里选择条件断点。

                    【讨论】:

                      【解决方案14】:

                      您可以通过设置条件来控制断点执行的时间和地点。条件可以是调试器识别的任何有效表达式。有关有效表达式的更多信息,请参阅Expressions in the debugger。

                      设置断点条件:

                      1. 右键单击断点符号并选择Conditions(或按Alt + F9、C)。或者将鼠标悬停在断点符号上,选择 Settings 图标,然后在 Breakpoint Settings 窗口中选择 Conditions。

                        您也可以在Breakpoints窗口中设置条件,方法是右键单击断点并选择Settings,然后选择Conditions。 p>

                      1. 在下拉列表中,选择Conditional Expression、Hit Count或Filter,然后设置相应的值。

                      2. 选择关闭或按Ctrl+Enter关闭断点设置窗口。或者,在 Breakpoints 窗口中,选择 OK 关闭对话框。

                      设置了条件的断点在源代码和断点窗口中以+号出现。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2020-11-22
                        • 2011-01-16
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-02-08
                        相关资源
                        最近更新 更多