Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Протоколирование работы программы(трассировка)   Найти похожие ветки 

 
Петр   (2005-06-05 09:07) [0]

Добрый день!

Для более качественной отладки хочу написать компонент (класс), который бы отслеживал последовательность запуска процедур и функций моего Delphi проекта.(Трассировка)

Смысл такой: Когда код выполняется в какой-либо функции в log-файл пишется "Вход в функцию MyFuncName", когда происходит выход из функции и в log пишется "Выход из функции MyFuncName"

Работу класса хочу сделать по аналогии с локальными переменными.
Выделить память под класс в начале функции и освободить память когда осуществляется выход из функции.

Допустим в некоторой функции я пишу

Function MyFunc1;
Begin
 Trace("MyFunc1"); // Создается класс и записывается log.
 ...
 ...
 некие действия функции MyFunc1
 // Теперь нужно освободить память под класс Trace и записать log
End;

Локальные переменные используются, а при выходе из функции, память выделенная под них освобождается.

Как мне тоже самое реализовать для класса?
Можно в конце функции написать Trace.Free, но а если выход из функции осуществляетя методом Exit или при ошибке?

Подскажите, кто-нибудь занимался написанием трассировкой?


 
-=XP=- ©   (2005-06-05 09:46) [1]

Как мне тоже самое реализовать для класса?

Использовать интерфейсы.
Написать свой интерфейс с нуля.
Или взять TInterfacedObject.
Или еще что-то из этой области.

Создается класс и записывается log.

Класс не создается - он уже описан Вами. А создаваться может экземпляр класса. Вот Вам подсказка: создавать этот экземпляр надо один раз, в начале работы программы, а удалть - в конце программы. Потому как зачем тратить уйму времени на создание/удаление, создание/удаление, создание/удаление... ух, завис... :))
Или выкинуть идею о классе, и использовать простую процедуру. Как Вы, впрочем, и написали: Trace("MyFunc1"). Зачем Вам класс-то? Ась?


 
heath ©   (2005-06-05 10:05) [2]

Трассировкой занимались многие.
Рискуешь сильно замедлить выполнение программы (я имею ввиду файловый вывод, затраты времени).
Дальше.
Зачем тебе каждый раз создавать свой Trace? Д.б. один объект, вот есть статейка по поводу таких реализаций http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=267.
Объект примитивный. Сделай его потомком TFileStream, добавь метод Trace(Message:string):


procedure TTrace.Trace(Message:string);
behin
 Write(PChar(MEssage)^, Lenght(Message);
 Write(sLineBreak, Length(sLineBreak));
end;


 
heath ©   (2005-06-05 10:16) [3]


> Или выкинуть идею о классе

Дело вкуса;)


 
Alex Konshin ©   (2005-06-05 10:43) [4]

Достаточно использовать OutputDebugString



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
14-1117223390
Gamer
2005-05-27 23:49
2005.06.29
Слабый сигнал. Мобила.


14-1117548364
Holy
2005-05-31 18:06
2005.06.29
Что означает номер чипсета?


14-1117954988
lookin
2005-06-05 11:03
2005.06.29
Вот людям делать нечего...


3-1116062350
yk
2005-05-14 13:19
2005.06.29
violation of FOREIGN KEY constraint


14-1117306783
P.N.P.
2005-05-28 22:59
2005.06.29
Орешник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский