当满足条件时如何进入调试模式?

7

当满足特定条件时,是否有一种方法进入调试模式?

例如,假设我希望在i == 1成为真的那一行进入调试模式:

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);
        }
    }
}

我知道可以设置条件断点,例如: conditional breakpoint 但是,在实际应用中,为了监测变量的值是否改变,需要为每一行代码添加一个条件断点,这样会使代码变得非常混乱。
那么,有没有一种方法能够全局设置条件“i == 1”,以便调试器在满足条件的行上停止运行?
谢谢您的帮助!
3个回答

3
简短的答案是“不”。
长时间的答案是“不完全是,但有点像”。你可以做一些事情来接近你想要的行为。
- 你可以使用监视窗口并手动步进代码并查看它的变化。 - 你可以找到变量的所有引用并隔离所有可能更改变量的语句,并放置断点。 - 你可以做以上操作,但使用包装函数(或使其成为属性),并仅通过该函数(或属性设置器)设置变量的值,然后你就有了一个单一的点,在那里你可以设置条件断点以比较旧/新值。 - 你可以在每一行上设置断点,并同时设置所有行的条件。你可能可以通过编写VS插件或宏来自动化这个过程。 - 这超出了我的能力范围 - 但我相信可能会有一些令人惊奇而复杂和神奇的事情,例如编写自己的调试器并实现“每当X更改时中断”。

谢谢,好答案:D 我喜欢这个想法:你可以在每一行上设置断点,并同时为它们设置条件。你可以通过编写VS插件或宏来自动化这个过程。 - Răzvan Flavius Panda

1
在VS的断点窗口中,可以选择多个断点,然后使用鼠标右键一次性为它们设置特定条件。
你觉得这样可以吗?

谢谢,这是有用的信息,但对于有大量代码行的实际项目来说,几乎是不可能的。 :) 我需要的是在整个解决方案中每一行都有条件断点的等效方法。 - Răzvan Flavius Panda

1
我会说不,如果你想一下的话,你正在要求调试器验证每一行代码,其中 i 在作用域内,尽管我会观察这个问题,看看是否有人能想到解决方法,因为这是件有趣的事情 :)

是的,这就是我想找出是否可能的内容:调试器能否在解决方案中的每一行代码之后检查条件。 - Răzvan Flavius Panda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接