|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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) и посмотри что будет. |