【问题标题】:In VS, make print-on-breakpoint use the console在 VS 中,让 print-on-breakpoint 使用控制台
【发布时间】:2011-10-13 15:07:12
【问题描述】:

我在 VS 2010 中创建了一个“当命中时,打印一条消息”断点。它可以工作,但它只输出到 VS 的“输出”窗格。我可以让它使用我的应用程序的控制台窗口吗?

我试过了:

Debug.Listeners.Add(new ConsoleTraceListener());

还有:

var writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

【问题讨论】:

    标签: visual-studio visual-studio-2010 debugging breakpoints


    【解决方案1】:

    可以在您的应用程序控制台窗口中打印此消息,但为此您需要使用调试器评估器:

    1. 创建一个您希望在遇到断点时从调试器调用的方法。
    2. 放置断点,但不要只提供文本消息,而是使用花括号中的方法名称,例如。 {CallFromDebugger()}

    看看这段代码:

        static void Main(string[] args)
        {
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();
        }
    
        [Conditional("DEBUG")]
        static void MessageFromDebugger(string message)
        {
            Console.WriteLine("I was called from the debugger evaluator: {0}", message);
        }
    

    如果您在第 5 行放置断点:Console.WriteLine(i);When Hit... 属性设置为:{MessageFromDebugger("来自地址 $ADDRESS")} 的消息,您应该会在控制台窗口中看到:

    0
    I was called from the debugger evaluator: message from address ConsoleApplication1.Program.Main(string[]) + 0x00000048
    1
    I was called from the debugger evaluator: message from address ConsoleApplication1.Program.Main(string[]) + 0x00000048
    2
    

    有趣的是,您可以向函数传递在调用范围内有效的参数以及特殊的调试器变量(例如 $ADDRESS、$PID、$CALLSTACK 等)。虽然我观察到特殊的调试器变量只是占位符,并且在提交给您的函数之前被替换,所以请记住将它们放在双引号中,例如。 {MessageFromDebugger(@"$CALLSTACK")}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2023-01-15
      • 1970-01-01
      • 2019-10-24
      • 2014-10-20
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多