Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Протоколирование работы программы(трассировка) [D7]


Петр ©   (2005-06-05 09:07:00) 

Добрый день!

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

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

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

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

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

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

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

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


Alex Konshin   (2005-06-05 10:43:00) [1]

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


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


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

Дело вкуса;)


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

Трассировкой занимались многие.
Рискуешь сильно замедлить выполнение программы (я имею ввиду файловый вывод, затраты времени).
Дальше.
Зачем тебе каждый раз создавать свой 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;


-=XP=-   (2005-06-05 09:46:00) [4]

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

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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо