Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

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

 
Петр   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
6-1112372936
Muh
2005-04-01 20:28
2005.06.29
Помогите, пожалуйста, с запросом ClientSocket


1-1118069208
Эдик Дятлов
2005-06-06 18:46
2005.06.29
Сохранить запись, содержащую динамический массив, в файл


14-1117565007
NightStranger
2005-05-31 22:43
2005.06.29
С чего все начинали


14-1117530340
passlight
2005-05-31 13:05
2005.06.29
Новая Хронология : ваши мнения ?


1-1118065199
Gashish
2005-06-06 17:39
2005.06.29
Перенос модели в из 3d max в Delphi