Russian Qt Forum

Qt => Общие вопросы => Тема начата: linkr от Июнь 10, 2010, 18:15



Название: поглядеть сколько выделилось памяти
Отправлено: linkr от Июнь 10, 2010, 18:15
во времени дебагинга возможно на определенной точке остановке? да и какие средства, для отлова утечек, на linux используют?

мне слот deleteLater() не внушает доверия, хочу проверить, правильно ли работает .

зы разделом ошибся , перенесите плз


Название: Re: поглядеть сколько выделилось памяти
Отправлено: Авварон от Июнь 10, 2010, 18:23
работает, успокойся. В qt мало критических утечек
valgrind
кстати слабо в деструкторе брейкпойнт поставить?)
и не надеюсь ты не отправляешь объект на удаление перед  выходом из цикла событий?


Название: Re: поглядеть сколько выделилось памяти
Отправлено: linkr от Июнь 10, 2010, 18:41
работает, успокойся. В qt мало критических утечек

valgrind
кстати слабо в деструкторе брейкпойнт поставить?)

в потоках не применяю деструкторы , а слот вызывается в нем, и объект не проверишь потом удалился или нет;)
Цитировать
и не надеюсь ты не отправляешь объект на удаление перед  выходом из цикла событий?

'не' наверно лишняя ) в том то и дело , что ,вроде как ,так оно и есть))) цикла событий потока )))


Название: Re: поглядеть сколько выделилось памяти
Отправлено: Авварон от Июнь 10, 2010, 19:09
чем обусловлено отсутствие деструкторов?
соедини сигнал треда finished() со слотом в нем, который очистит всё. Только следи что этот слот выполнится в глав потоке скорее всего.


Название: Re: поглядеть сколько выделилось памяти
Отправлено: garryHotDog от Июнь 10, 2010, 19:15
у меня тоже было не доверие к deleteLater(); - проверял точкой останова в деструкторе и еще вот что :
Цитировать
void QObject::destroyed ( QObject * obj = 0 )   [signal]
This signal is emitted immediately before the object obj is destroyed, and can not be blocked.

All the objects's children are destroyed immediately after this signal is emitted.

See also deleteLater() and QPointer.
- отловив этот сигнал - узнаешь что объект уничтожился!!!


Название: Re: поглядеть сколько выделилось памяти
Отправлено: linkr от Июнь 10, 2010, 19:31
у меня тоже было не доверие к deleteLater(); - проверял точкой останова в деструкторе и еще вот что :
Цитировать
void QObject::destroyed ( QObject * obj = 0 )   [signal]
This signal is emitted immediately before the object obj is destroyed, and can not be blocked.

All the objects's children are destroyed immediately after this signal is emitted.

See also deleteLater() and QPointer.
- отловив этот сигнал - узнаешь что объект уничтожился!!!

супер...
Авварон меня что-то пугает) подскажи нужную опцию, а то в новом созданном проекте

Код:
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

получаю такой результат

 valgrind  --leak-check=full  --show-reachable=yes  ./Lin_server

Код:
==9227== LEAK SUMMARY:
==9227==    definitely lost: 1,952 bytes in 8 blocks
==9227==    indirectly lost: 7,500 bytes in 376 blocks
==9227==      possibly lost: 610,734 bytes in 4,113 blocks
==9227==    still reachable: 364,449 bytes in 5,234 blocks
==9227==         suppressed: 0 bytes in 0 blocks



Название: Re: поглядеть сколько выделилось памяти
Отправлено: Авварон от Июнь 10, 2010, 19:56
валгринд - не ко мне... на маке он не работает для 64бит аппликух, и есть встроенная мегатулза к-ая с виду умнее валгринда (да еще и гуевая)
валгринд показывает в тч утечки разных статических объектов, которые не удаляются должным образом (косяк троллей, но на статики можно забить - они ж не утекают на самом деле). Гугли как это отсеять)


Название: Re: поглядеть сколько выделилось памяти
Отправлено: linkr от Июнь 10, 2010, 20:01
 мак PC? версия? название тулзы?


Название: Re: поглядеть сколько выделилось памяти
Отправлено: Авварон от Июнь 10, 2010, 20:10
мак - macintosh... 10.6
тулза "запрятана" внутри /Developer/Applications/Instruments.app (зовется Leaks)
та что /Developer/ApplicationsPerformance Tools/MallocDebug.app претендует на звание быть глючной (тк я ей не смог запустить ни 1 большое приложение)


Название: Re: поглядеть сколько выделилось памяти
Отправлено: Sahab от Июнь 10, 2010, 21:34
утечки разных статических объектов
???


Название: Re: поглядеть сколько выделилось памяти
Отправлено: Авварон от Июнь 10, 2010, 21:52
Код:
Class A
{
   static Object * o;
}

//*.cpp:
Object A::o = new Object();
утечка? или нет? В коде удаления нигде нет


Название: Re: поглядеть сколько выделилось памяти
Отправлено: ритт от Июнь 10, 2010, 22:58
сравним с
Код:
Q_GLOBAL_STATIC(Object, o)
:)


Название: Re: поглядеть сколько выделилось памяти
Отправлено: Авварон от Июнь 10, 2010, 23:04
ага, только где про эти макросы прочесть можно?) то, что ты юзал в зип энжине, взрывает мозг;)