【问题标题】:How to enter debug mode when a condition is met?满足条件时如何进入调试模式?
【发布时间】:2012-06-12 08:15:26
【问题描述】:

有没有办法在满足某个条件时进入调试模式?

例如,假设我想在 i == 1 变为 true 的那一行进入调试模式:

using System;

namespace ConditionalDebug
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var r = new Random();
            var i = r.Next(2);
            i += r.Next(2);
            i += r.Next(2);
            i += r.Next(2);
            i += r.Next(2);
            i = 1;
            Console.WriteLine(i);
        }
    }
}

我知道可以设置条件断点,例如:

但是我当然不能使用它,因为我必须为代码中的每一行添加一个条件断点,条件值可能会改变,这在实际应用程序中会变得非常混乱。

那么,有没有办法全局设置条件i == 1,以便调试器在满足条件的那一行中断?

感谢您的帮助!

【问题讨论】:

    标签: c# visual-studio-2010 visual-studio debugging conditional-statements


    【解决方案1】:

    简短的回答是“不”

    长答案是'不是真的,但有点'。你可以做一些事情来接近你想要的行为。

    • 您可以使用 Watch 窗口并手动单步执行代码并查看它的变化。
    • 您可以找到变量上的所有引用,并隔离所有可以更改变量并放置断点的语句。
    • 您可以执行上述操作,但使用包装函数(或使其成为属性)并仅通过该函数(或属性设置器)设置变量的值,然后您就可以在其中设置条件断点比较旧值/新值。
    • 您可以在每一行上设置一个断点,并同时为所有行设置条件。您或许可以通过编写 VS 插件或宏来自动执行此操作。
    • 这超出了我的能力 - 但我确信可以做一些非常复杂和令人惊叹的事情,比如编写自己的调试器并实现“每当 X 更改时中断”。

    【讨论】:

    • 谢谢,很好的回答:D 我喜欢这个主意:You could put a break point on EVERY line and set the condition for all of them at once. You might be able to automate that by writing a VS Plug-in or Macro.
    【解决方案2】:

    我会说不,如果您考虑一下,您是在要求调试器验证 i 范围内的每一行代码,尽管我会看这个看看是否有人能想到解决方法,因为这会很有趣见:)

    【讨论】:

    • 是的,这就是我想知道的是否可行:让调试器检查解决方案中每一行代码之后的条件。
    【解决方案3】:

    在VS的断点窗口中,可以选择多个断点,然后鼠标右键可以一步设置两个断点的特定条件。

    你觉得可以吗?

    【讨论】:

    • 谢谢,这是一个有用的信息,但对于具有大量代码行的实际项目来说几乎是不可能的。 :) 我需要的是相当于在整个解决方案的每一行都有一个条件断点。
    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2018-04-18
    • 2013-07-08
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多