В VS заставьте print-on-breakpoint использовать консоль - PullRequest
3 голосов
/ 13 октября 2011

Я создал точку останова «когда нажмете, напечатайте сообщение» в VS 2010. Он работает, но выводит только на панель «вывода» VS.Могу ли я заставить его использовать окно консоли моего приложения?

Я пробовал:

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

А также:

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

1 Ответ

5 голосов
/ 15 октября 2011

Можно напечатать это сообщение в окне консоли вашего приложения, но для этого вам нужно использовать оценщик отладчика:

  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 ("сообщение от адрес $ 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")}

...