【问题标题】: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】:
可以在您的应用程序控制台窗口中打印此消息,但为此您需要使用调试器评估器:
- 创建一个您希望在遇到断点时从调试器调用的方法。
- 放置断点,但不要只提供文本消息,而是使用花括号中的方法名称,例如。 {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")}