|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вывод отладочной информации
Всем привет. В процессе разработки приложений на Делфи иногда возникает необходимость в отладке некоторых функций либо участков кода, для этого иногда приходится специально добавлять компоненты для вывода отладочной информации (такие, как Memo, Label и тп). Когда все начинает работать как надо эти компоненты уже не нужны и их приходится удалять. Я подумал, что для вывода такой информации можно написать специальный модуль с консолью. Но консоль в Делфи рассматривается скорее как отдельное приложение. И я не понимаю, можно ли использовать консоль вместе со стандартной формой Делфи? Или, как можно реализовать модуль для отладки приложений с консолью либо без неё?
|
#2
|
||||
|
||||
Эм.. Понимаю, если бы писал операционку или еще что-то в таком духе. Но в делфи существует дебаг, с просмотром всех переменных и пошаговым исполнением. Отладочный вывод требуется крайне редко, а если и требуется - то достаточно вывода в файл или какой-нибудь ShowMessage.
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 19.05.2013 в 18:11. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
winsman (19.05.2013)
|
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Ну так закрой) жми enter
Имхо showmessage - самое удобное А если в цикле и много вызовов - посмотрел с десяток, понял, что переменные правильно/неправильно крутятся, нажал reset Я за здоровый экстрим! Спасибо за "спасибо") |
Этот пользователь сказал Спасибо Mrak за это полезное сообщение: | ||
winsman (19.05.2013)
|
#5
|
||||
|
||||
Цитата:
Цитата:
И еще раз, самое удобное на мой взгляд - это трассировка и Watch. Можно, конечно, сделать консоль, слать туда данные, но пользы будет минимум. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
winsman (19.05.2013)
|
#6
|
|||
|
|||
Иногда делать трассировку очень долго, тем более если код работает нормально и нужно просто проверить данные, которые сообщает тот или другой процесс при постоянно меняющихся входных данных этого процесса. В консоль, например, можно вывести входные данные и результат их обработки, не прибегая к трассировке кода и тп (в таком случае консоль может заменить TMemo, но его нужно добавить в окно приложения а затем удалить, что на мой взгляд не совсем удобно)
|
#7
|
||||
|
||||
Все равно не понимаю, что мешает поставить брейк-пойнт, если надо - можно с условием на срабатывание после N-ного прохода. Запись в файл равносильна консоли, только данные сохраняются навсегда.
Если все еще собираешься делать - искать по теме что-нибудь вроде AllocConsole. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
winsman (19.05.2013)
|
#8
|
||||
|
||||
создай процедуру WriteLog(s: String). когда отлаживаешь пиши в ней в файл лог. после заглуши ее Exit'ом.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
winsman (19.05.2013)
|
#9
|
|||
|
|||
AllocConsole решило проблему http://www.delphisources.ru/pages/fa...n_noncons.html. Правда код пришлось адаптировать под модуль и написать функцию для перевода из ANSI в ASCII. Теперь достаточно подключить модуль и данные можно выводить в консоль.
Спасибо! |
#10
|
|||
|
|||
в виндовc.pas есть процедура
OutputDebugString( str ); правда принимает тока строки. но можно написать процедурку такую Код:
Procedure Debug(OutText:Variant); var text:string; begin case TVarData(OutText).VType of varSmallInt, varInteger : text := IntToStr(OutText); varSingle, varDouble, varCurrency : text := FloatToStr(OutText); varDate : text := FormatDateTime('dd/mm/yyyy', OutText); varBoolean : if OutText then text := 'T' else text := 'F'; varString : text := OutText; else text := ''; end; OutputDebugString(PChar(text)); end; |
#11
|
||||
|
||||
Цитата:
после отладки удали консоль (AllocConsole) и посмотри что будет. Пишу программы за еду. __________________ |