![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет. В процессе разработки приложений на Делфи иногда возникает необходимость в отладке некоторых функций либо участков кода, для этого иногда приходится специально добавлять компоненты для вывода отладочной информации (такие, как Memo, Label и тп). Когда все начинает работать как надо эти компоненты уже не нужны и их приходится удалять. Я подумал, что для вывода такой информации можно написать специальный модуль с консолью. Но консоль в Делфи рассматривается скорее как отдельное приложение. И я не понимаю, можно ли использовать консоль вместе со стандартной формой Делфи? Или, как можно реализовать модуль для отладки приложений с консолью либо без неё?
|
|
#2
|
||||
|
||||
|
Эм.. Понимаю, если бы писал операционку или еще что-то в таком духе. Но в делфи существует дебаг, с просмотром всех переменных и пошаговым исполнением. Отладочный вывод требуется крайне редко, а если и требуется - то достаточно вывода в файл или какой-нибудь ShowMessage.
Последний раз редактировалось Bargest, 19.05.2013 в 18:11. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
winsman (19.05.2013)
| ||
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Ну так закрой) жми enter
Имхо showmessage - самое удобное А если в цикле и много вызовов - посмотрел с десяток, понял, что переменные правильно/неправильно крутятся, нажал reset |
| Этот пользователь сказал Спасибо Mrak за это полезное сообщение: | ||
winsman (19.05.2013)
| ||
|
#5
|
||||
|
||||
|
Цитата:
Цитата:
И еще раз, самое удобное на мой взгляд - это трассировка и Watch. Можно, конечно, сделать консоль, слать туда данные, но пользы будет минимум. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
winsman (19.05.2013)
| ||
|
#6
|
|||
|
|||
|
Иногда делать трассировку очень долго, тем более если код работает нормально и нужно просто проверить данные, которые сообщает тот или другой процесс при постоянно меняющихся входных данных этого процесса. В консоль, например, можно вывести входные данные и результат их обработки, не прибегая к трассировке кода и тп (в таком случае консоль может заменить TMemo, но его нужно добавить в окно приложения а затем удалить, что на мой взгляд не совсем удобно)
|
|
#7
|
||||
|
||||
|
Все равно не понимаю, что мешает поставить брейк-пойнт, если надо - можно с условием на срабатывание после N-ного прохода. Запись в файл равносильна консоли, только данные сохраняются навсегда.
Если все еще собираешься делать - искать по теме что-нибудь вроде AllocConsole. |
| Этот пользователь сказал Спасибо 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; |
| Этот пользователь сказал Спасибо Snake22 за это полезное сообщение: | ||
VLL (20.11.2024)
| ||
|
#11
|
||||
|
||||
|
Цитата:
после отладки удали консоль (AllocConsole) и посмотри что будет. |