Форум: "Основная";
Текущий архив: 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.042 c