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, но не получилось. Как внутри функции с переменным числом аргументов вызвать другую функцию и ей передать эти аргументы? Делал так: 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; } Но ничего не вышло, телефон ушел в ребут. |
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, можно сделать проще |
den_po: |
05.03.11, 01:57 |
неучтёнными из >650 функций остались 80 (не все из них могут привести к утечкам). развивается, хотя и медленно (как и всё, что я делаю ) |
Страница 1 из 2: [1] 2 » |
URL этой темы: https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4094 © 2005-2018 supertrubka.org |