Все остальные ответы верны.
Мой личный любимый прием (такой же, как ответ da-soft) - создать точку останова, которая регистрирует сообщение в журнале событий, содержащее значение, которое я хочу зарегистрировать, и на самом деле не «ломается» (то есть выполнение продолжается без нажатия на значок «Выполнить». Затем каждый раз, когда достигается эта строка кода, я получаю свое сообщение и свои значения в журнале. Поскольку я могу вернуться и прочитать историю, а также увидеть текущие значения, я считаю это более полезным, чем просто использование окна просмотра отладчика.
Но поскольку Delphi XE включает CodeSite, вы можете пойти гораздо дальше того, что для вас делает оценка выражений в точках останова. Сайт Code, однако, требует, чтобы вы изменили свой код, чтобы добавить некоторые записи. Но это намного лучше, чем окно сообщения.
Вы также можете использовать OutputDebugString (PChar (s)) для вывода любой строки в отладчик. Поскольку он может содержать все, что вы хотите, это очень хороший способ отладки, но не показывать вещи конечному пользователю.
Во многих моих приложениях у меня есть специальный буфер трассировки, который является круглым (то есть он хранит только последние 500 или около того строк). Когда я вижу проблему, я не только получаю трассировку стека, но и сохраняю этот журнал трассировки в памяти, поэтому у меня есть история того, что происходило незадолго до моей проблемы.
Вы также можете ознакомиться с проектом Log 4 Delphi .