powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Вопросы по IT / TJclStackInfoList из библиотеки JclDebug (нестандартное использование исключений или ассертов)
1 сообщений из 1, страница 1 из 1
TJclStackInfoList из библиотеки JclDebug (нестандартное использование исключений или ассертов)
    #809988
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в программе много утечек памяти; я пробую их отловить с помощью ReportMemoryLeaksOnShutdown, но эта опция даёт недостаточно информации. Я решил сделать по своему и написать что-то вроде собственного “сборщика мусора”, о котором уже писал в другой теме:
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type
TSafeObject=class
public
constructor Create;
destructor Destroy; override;
end;

constructor TSafeObject.Create;
begin
  inherited;
  if fulldebugmode then ProjectGarbageCollector.ObjectCreated(self);
end;

destructor TSafeObject.Destroy;
begin
  if fulldebugmode then ProjectGarbageCollector.ObjectDestroyed(self);
  inherited;
end;:
Все свои классы я сделал наследниками TSafeObject. Этот сборщик пишет в текстовом файле список классов, которые не были уничтожены, но всё равно это ещё недостаточная информация, чтобы легко найти баги. Я хочу встроить в обработчик TSafeObject.Create нестандартное использование исключения – анализ стека с целью узнать место в коде, откуда был вызван этот конструктор. Вроде для этого можно использовать библиотеку JclDebug: пишут, что если её подключить к проекту, обработчик исключения будет в переменной e.StackTrace выдавать в текстовом виде много информации, которая мне и нужна.
Я пробовал подключить JclDebug к моему проекту, но во-первых это не получается из-за какой-то несовместимости: библиотеке нужны некие ModuleInfo.EntryPoint, EnumProcessModules и ещё много того, что нет в этой самой библиотеке. Во-вторых, я не хочу подключать к проекту всю эту библиотеку – она сильно большая, мне нужен только класс TJclStackInfoList чтобы внедрить его в обработчик исключения (если и это вообще нужно). Если кто-нибудь работал с JclDebug – подскажите, как проще всего решить мою задачу?
Как я уже сказал, мне вроде нужно только одно – чтобы мой собственный обработчик Application.OnException получал в e.StackTrace не пустую строку, как по умолчанию, а то, что есть в других ЯП (в .NET есть Exception.StackTrace и в Java есть Exception.getStackTrace).
Или любое другое решение основной задачи - чтобы конструктор TSafeObject.Create как-то узнал (и мог передать объекту ProjectGarbageCollector) информацию, из какого участка кода он был вызван. Если не получится "красивое" решение с нестандартным использованием исключений или ассертов - придётся вставлять в разные участки кода "вызовы-маркеры", которые будет отслеживать и выводить в логе мой ProjectGarbageCollector.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Вопросы по IT / TJclStackInfoList из библиотеки JclDebug (нестандартное использование исключений или ассертов)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]