суббота, 14 февраля 2009 г.

Трассировочные точки (Tracepoints)

Вы, вероятно, уже знаете о таких замечательных возможностях контрольных точек (или точек останова, breakpoints) в Visual Studio, как счетчики срабатываний (hit count) и условные выражения (conditional expression). Если вы не знакомы с этими понятиями, достаточно в редакторе поставить breakpoin, а затем в окне Breakpoints в контексном меню соответствующей точки выбрать Hit Count или Condition соответственно. Счетчик срабатываний говорит отладчику, что контрольную точку нужно установить в коде, но не останавливаться на ней до тех пор, пока код не будет выполнен определенное число раз. Контрольная точка для которой определено условное выражение останавливает отладчик только в том случае, если условное выражение возвращает true.
 
Помимо этих замечательных возможностей в Visual Studio 2005 появилась новая возможность отладки - трассировочные точки, которые являются всего-лишь особой разновидностью контрольных точек. Назначение трассировочных точек - вывод трассировочной информации без модификации исходного кода.
 
Для того, чтобы установить трассировочную точку, вначале нужно поставить обыкновенную контрольную точку в некотором месте исходного кода, затем в окне Breakpoints в контекстном меню выберите команду When Hit. Затем в диалоговом меню When Breakpoint Is Hit можно указать диагностическое сообщение, которое будет выводиться каждый раз, когда отладчик будет выполнять указанную строку кода. Кроме того, если установить флажок Continue Execution, то отладчик не будет прекращать выполнение программы при проходе через контрольную точку. В поле "Print a message" диалогового окна When Breakpoint is Hit вы можете обращаться к любому коду, к которому вы бы могли получить доступ в той строке кода, где установлена контрольная точка, с единственной поправкой: все обращения должны быть заключены в {}.
 
Вот пример: {DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss.fff")}: Function: $FUNCTION, foo: {foo()}, x: {x}
 
В результате выполнения в окне Output может быть следующий результат:
 
"2009.02.14 23:53:41.968": Function: Program.TestFunction(), foo: "hello from foo()", x: 123
 
Помимо обращения к функциям и переменным, разработчики Visual Studio предусмотрели набор предустановленных макросов, таких как: $FUNCTION, $CALLER, $CALLSTACK, $TID, $TNAME и др. Т.о. если вам понадобится трассировка приложения, не нужно сразу же весь код засыпать вызовами Trace или другими средствами логгирования, возможно будет достаточно воспользоваться трассировочными точками.

1 комментарий:

  1. Прикольно, иногда просто лень точить пилу, так как пилить дофига надо :)

    ОтветитьУдалить