deleaker : Эльфостроение : Форум

Страница 1 из 2: [1] 2 »

 den_po:
01.07.09, 09:34
 в общем-то опубликована эта штука давно (в составе mcse), но так и не доделана. и знают о ней не все.

деликер - средство обнаружения утечек ресурсов (в основном памяти). после завершения работы эльфа в прочем на телефоне создаётся файл memory.txt, в котором будут перечислены утечки.

главных файлов два - mem.cpp и mem.h, их и нужно добавлять в свои проекты.
чтоб добавить деликер в свой проект, нужно удалить из проекта файл _cpp2.cpp, добавить mem.cpp, и в каждом включаемом .c или .cpp первой строчкой инклюдить mem.h.
в мэйне первым же делом нужно вызывать trace_init(), а в elf_exit() нужно вызывать trace_done()
.
релизный конфиг должен содержать константу NDEBUG. в релизном конфиге эльф работает как и без деликера.
для наглядности в приложенном эльфе-примере выделяются три блока памяти, которые при завершении его работы не удаляются.
ещё раз обращаю внимание, в релизном конфиге эльф работает как и без деликера, так что для проверки собирайте debug версию.
ну и реализован учёт очень небольшого количества функций, хотя самые главные есть. если кто предложит свои варианты для остальных функций, будем рады.

 den_po:
09.08.09, 10:13
 переделанная версия.
для примера на этот раз использован букман.

p.s.: обидно, кто-то вроде пользуется, а расширить список поддерживаемых функций всем лень.

 BigHercules:
26.08.09, 19:29
 Добавил ImageID_Get, ImageID_GetIndirect и ImageID_Free.


Добавлено 26.8.09 19:36

Пытался добавить CreateYesNoQuestionVA, но не получилось. :oops:

Как внутри функции с переменным числом аргументов вызвать другую функцию и ей передать эти аргументы?

Делал так:
GUI * __deleaker_CreateYesNoQuestionVA(char* __file__, int __line__, int zero, ...)
{
va_list _ap;
va_start(_ap, zero);
GUI * ret = __original_CreateYesNoQuestionVA(zero, _ap);
va_end(_ap);
trace_alloc(trace_memory, (void*)ret, __file__, __line__);
return ret;
}

Но ничего не вышло, телефон ушел в ребут. :-(

Прикрепленный к сообщению файл:

mem2.zip mem2.zip (9.55 kb; 30 hits) Скачать файл

 Joker XT:
26.08.09, 20:45
 BigHercules, вроде так
Код: 
wchar_t * CreateFD (FILE_DIALOG* fd,
                    BOOK * book,
                    int flags,
                    wchar_t * header,
                    wchar_t * filters,
                    ...  // folders list
                      )
{
  int args;
  wchar_t * res;
  va_list ap;
  va_start(ap, filters);
  args = va_arg(ap, int);
  res=CreateFileDialog (book, flags, header, filters,&args);
  va_end(ap);
  return(res);
}


 BigHercules:
26.08.09, 22:35
 
Joker XT пишет:
BigHercules, вроде так
...

Я наверное немного неправильно написал. Внутри функции с переменным количеством аргументов мне нужно вызвать также функцию с переменным количеством входных аргументов. Т.е. прототип функции __original_CreateYesNoQuestionVA в приведенном мною выше кусочке кода такой:
GUI *__original_CreateYesNoQuestionVA(int zero, ...);

 KreN:
27.08.09, 01:07
 Joker XT писал:
BigHercules, вроде так

Не, тут не правильно (поэтому и по два раза добавляло файлы)

BigHercules, практически невозможно так сделать, ты даешь функции указатель на массив аргументов, а не сам массив. А чтобы дать сам массив надо знать его размер (количество аргументов), но до выполнения функции его узнать нельзя.

 den_po:
27.08.09, 01:41
 можно внутри функции самим формировать стек и вызывать. но без асемблерных вставок наверное не обойтись.

 den_po:
05.09.09, 20:49
 чуть обновил. положил ещё и шаблоны с php-скриптом для генерации.

 den_po:
24.03.10, 10:23
 обновил деликера. теперь и варарговые функции. лежит на свн.
кстати, вместо того, чтоб инклюдить mem2.h в каждом .c/.cpp, можно сделать проще

Прикрепленный к сообщению файл:

include.PNG include.PNG (20.60 kb; 501 hits) Скачать файл

 den_po:
05.03.11, 01:57
 неучтёнными из >650 функций остались 80 (не все из них могут привести к утечкам). развивается, хотя и медленно (как и всё, что я делаю :lol: )
Страница 1 из 2: [1] 2 »

URL этой темы:
https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4094

© 2005-2018 supertrubka.org