在VS中,make print-on-breakpoint使用控制台

Ste*_*nov 3 debugging breakpoints visual-studio-2010 visual-studio

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

我试过了:

Debug.Listeners.Add(new ConsoleTraceListener());
Run Code Online (Sandbox Code Playgroud)

以及:

var writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);
Run Code Online (Sandbox Code Playgroud)

low*_*ign 5

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

  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);
    }
Run Code Online (Sandbox Code Playgroud)

如果在第5行放置断点:Console.WriteLine(i); 当打...属性设置为:{MessageFromDebugger("从地址$地址信息")}你应该在你的控制台窗口中看到:

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
Run Code Online (Sandbox Code Playgroud)

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