2011-10-13 61 views
3

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

我已经试过:

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

除了:

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

回答

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

如果你把第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 

有趣的是,你可以传递参数你的函数在调用范围以及特殊的调试器变量(例如$ ADDRESS,$ PID,$ CALLSTACK等)中都是有效的。我注意到,虽然特殊的调试器变量只是占位符,并在提交给你的函数之前被替换,所以记得把它们放在双引号中,例如。 {MessageFromDebugger(@“$ CALLSTACK”)}

相关问题