Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: ElderOrb от Декабрь 08, 2005, 12:09



Название: performance analysis and memory leak tools
Отправлено: ElderOrb от Декабрь 08, 2005, 12:09
сабж


Название: Re: performance analysis and memory leak tools
Отправлено: nEoN от Декабрь 08, 2005, 13:16
BoundsChecker 7 for MSVC++.
По его мнению в недрах Qt4 попадаются утечеки и памяти и ресурсов  :?


Название: Re: performance analysis and memory leak tools
Отправлено: Admin от Декабрь 08, 2005, 13:25
Valgrid и BoundChecker только 6 версии
7 медленноват!


Название: Re: performance analysis and memory leak tools
Отправлено: ElderOrb от Декабрь 08, 2005, 14:55
2nEoN:
Цитировать
По его мнению в недрах Qt4 попадаются утечеки и памяти и ресурсов


В том-то и дело.. Я пробовал AQTime, DevPartner и что-то ещё... И всё они плохо работали c Qt (тогда ещё 3-им).

2Admin:
А есть ли Valgrind под винды?


Название: Re: performance analysis and memory leak tools
Отправлено: Admin от Декабрь 08, 2005, 16:17
NO only linux kernel!


Название: Re: performance analysis and memory leak tools
Отправлено: SLiDER от Декабрь 08, 2005, 22:54
Под Linux : Valgrind.
Под Windows : в основном Devpartner, но последнее время все реже им  и чаще просто дебагерной версией crt-библиотеки и ручками, за последние несколько лет так насобачился, что никаких детекторов утечек не нужно.

В качестве профайлера для обоих систем, можно порекомендовать Intel VTune.

Что бы Devpartner не ругался на Qt, нужно просто отключить отладку ее dll в настройках етой софины. Там же (в настройках) ее можно и ускорить, за счет упрощенных алгоритмов анализа, но это скажется на качестве отлова утечек.

А вообщето лучший дебагер/профайлер и т.п. это голова. Все читаем лучшую книгу на эту тему : Мэтт Тэллес, Юань Хсих. Наука отладки, или еще : Анн Р. Форд, Тоби Дж. Теори. Практика отладки в C++


Название: Re: performance analysis and memory leak tools
Отправлено: ElderOrb от Декабрь 09, 2005, 10:40
Ок, спасибо за инфу. А может эти книжки у кого в электронном виде есть? ж)


Название: Re: performance analysis and memory leak tools
Отправлено: Вудруф от Декабрь 09, 2005, 13:06
А что из вышеперечисленного работает с MinGW?


Название: Re: performance analysis and memory leak tools
Отправлено: Dendy от Декабрь 09, 2005, 18:59
Visual Studio 2005: _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

А вообще архитектура Qt сделана так, что заработать утечку єто ещё нужно потрудиться :D  Практически все new в делаются в конструкторах и пришибаются самой Qt. Единственная сложность на Qt4 - контейнерьl теперь не удаляют данньl не по указателям, что в них хранятся, но єто скорее плюс.


Название: Re: performance analysis and memory leak tools
Отправлено: ElderOrb от Январь 05, 2006, 15:13
Цитата: "Dendy"
Visual Studio 2005: _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );


Насчёт этого вопрос: Допустим я имею вот такую инфу
Код:
Detected memory leaks!
Dumping objects ->
{161} normal block at 0x00F97330, 1 bytes long.
 Data: < > CD
Object dump complete.


А как бы это теперь узнать ещё и строчку, которая порождает утечку?...


Название: Re: performance analysis and memory leak tools
Отправлено: Dendy от Январь 05, 2006, 16:31
А вот ето загадка, которую я не решил. Кто вьІделяет память я узнавал ставя брикпоинт на номер вьІделения памяти (161) в одном из заголовочников. Сейчас даже не вспомню в каком...


Название: Re: performance analysis and memory leak tools
Отправлено: ElderOrb от Январь 05, 2006, 16:49
Вот здесь http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxconenablingmemoryleakdetection.asp написано, что если сделать #define _CRTDBG_MAP_ALLOC, то будет показываться ещё и файл и строчка с утечкой:

Цитировать

With _CRTDBG_MAP_ALLOC defined, the display also shows you the file where the leaked memory was allocated. The number in parentheses following the filename (20, in this example) is the line number within the file.


Однако как я ни бился, желаемого эффекта достичь не удалось...


Название: Re: performance analysis and memory leak tools
Отправлено: Dendy от Январь 05, 2006, 19:35
Цитата: "ElderOrb"
Однако как я ни бился, желаемого эффекта достичь не удалось...


Аннналагична.

А рьІться в тех исходниках как-то желания особого нету.


Название: Re: performance analysis and memory leak tools
Отправлено: yshurik от Январь 06, 2006, 15:40
Valgrind. Правда он показывает некоторые вещи которые висят постоянно с Qt, но их довольно легко отмежевать от твоих собственных leaks.


Название: Re: performance analysis and memory leak tools
Отправлено: pacmanoid от Июнь 12, 2006, 06:00
Необходимо отловить утечки памяти и спрофилировать QT приложение. Так как данное приложение будет работать очень длительное время без перезапуска. Подскажите пожалуста какие средства есть для отлова утечек памяти и какие можно использовать профайлеры? Кто что использует для LINUX и для Windows. И если можно то как?


Название: Re: performance analysis and memory leak tools
Отправлено: L.Marvell от Июнь 12, 2006, 19:47
Под Линукс - http://valgrind.org/ (KDevelop умеет с ним работать). Под винду не скажу, т.к. не знаю.


Название: Re: performance analysis and memory leak tools
Отправлено: Admin от Июнь 12, 2006, 23:00
Bound Checker под виндоус
но 6 версия туповата, а 7 очень тормозная


Название: Re: performance analysis and memory leak tools
Отправлено: Admin от Июнь 13, 2006, 14:32
есть еще прога  типа insign++ но я ее так и не заставил работать!

мой путь обычно
собираем VC++
собираем G++ и потом valgrind
потом снова VC++ и потом VTune!

вот код получается достаточно устойчив! при условии что пишешь на QT! :)


Название: Re: performance analysis and memory leak tools
Отправлено: Winstrol от Октябрь 10, 2007, 16:20
Кто-нибудь пользовался CodeAnalyst для профилирования Qt приложений? Пока даже самый простой тест на QT не получается прикрутить. Примеры из поставки профайлера работают. Никто не в курсе, где грабли могут быть?


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Декабрь 19, 2007, 01:53
Кто может подсказать тулзу для определения участков программы имеющие проблемы с производительностью?

Побывал Performance Analysis из пакета Compuware DevPartner for Visual C++ но без успешно. По непонятным причинам она отказываеться работать. Error detection работает нормально.

У кого есть опыт в этом деле - поделитесь. Буду признателен! :) Нужна под Линукс или Винду.


Название: Re: performance analysis and memory leak tools
Отправлено: uriel от Декабрь 19, 2007, 07:21
Под Линукс использую две разных программы.
Во-первых, можно воспользоваться стандартными профилирующими средствами GCC. Для этого при компиляции и линковке нужно добавить ключ -pg. Далее, после запуска программы появится файлик gmon.out. Можно, конечно, работать с ним и в консоле, но я предпочитаю KProf. Только открывать там надо не этот файл, а сам бинарник приложения. В итоге получите статистику, в каких функциях проводится больше всего времени (в ms), какие чаще всего вызываются, etc.
Во-вторых, есть набор утилит valgrind, а конкретно callgrind. Для этого запускаем приложение следующим образом: valgrind --tool=callgrind BINARY_FILE. При этом, правда, скорость выполнения программы снижается в 5-10 раз, так как программа выполняется на собственном виртуальном процессоре утилиты, чтобы перехватывать все инструкции. На выходе получите файлик со именем callgrind.out.PID. Его лучше всего просматривать через KCachegrind. Файл содержит полную статистику по количеству процессорных инструкций, выполненных в каждой функции, вплоть до libc. :) Программа строит очень удобные графы вызова, позволяет группировать функции по ELF-объектам, классам, исходникам. Если есть отладочная информация, можно даже просматривать конкретные строчки кода. В целом, очень полезная штука. :)


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Декабрь 19, 2007, 09:57
Спасибо за столь развернутый ответ! Буду пробывать!  :)


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Декабрь 20, 2007, 03:18
Заюзал callgrind. Супер! Реально эта тулза мне помогла! Ещё раз большое спасибо, uriel!


Название: Re: performance analysis and memory leak tools
Отправлено: Mikor от Декабрь 20, 2007, 06:44
Всю жизнь использую Intel VTune Performance Analyzer. Весьма им доволен. Раньше были достаточно глючные версии, теперь вроде лучше стало. Есть версии под Linux и Windows. Недавно ознакомился с профилировщиком в Visual C++ 2008 Team, как познакомился, так и решил больше неиспользовать. Слишком не функциональный.
Оффтопик: А вообще, профилировка это очень часто заточка под архитектуру. Гораздо привлекательнее оптимизировать (пересмотреть) сам алгоритм, вряд-ли какая-либо оптимизация будет быстрее. Ну еще сразу разработка алгоритма под SSE дает прирост производительности, но надо либо очень-очень хорошо владеть оптимизацией на ассемблере (прочитав свежий Intel Optimization Manual), либо очень хорошо прочитать доку по компилятору, чтобы указать ему что оптимизировать и дать возможность разобрать логику алгоритма на SSE комманды (хотя-бы до степени векторизации массивов). Т.е. занятие это сложное, аналитическое и, как правило, не благодирное со стороны заказчика. Гораздо дешевле купить проц побыстрее, с большим кол-вом ядер, с более быстрой шиной, мат. плату с современным чипсетом, быструю память... А кому надо всё-таки большие вычислительные можности использовать, советую бросить взгляд в сторону nVidia CUDA (ищем в google).


Название: Re: performance analysis and memory leak tools
Отправлено: vregess от Декабрь 20, 2007, 07:34
Хорошая инфа. Давайте ее в фак засунем. Будет полезно.
Спасибо за информацию!


Название: Re: performance analysis and memory leak tools
Отправлено: uriel от Декабрь 20, 2007, 09:20
Intel VTune Performance Analyzer, насколько я понял, платная программа, а это не так хорошо, как хотелось бы. Valgrind, напротив, Open Source проект, который включает в себя набор утилит для разностороннего профилирования приложений. Единственный недостаток, насколько мне известно, это отсутствие версии под Винду. Но там и своего добра достаточно, опять же, насколько мне известно.
Кроме того, не считаю, что профилирование - суть заточка под конкретную архитектуру. Просто оно позволяет найти слабые места в программе, какие-то куски неэффективного на _любых_ платформах кода. Можно отлавливать также утечки памяти. Ну а в целом, согласен в Вами, что занятие это не всегда благодарное, но тем не менее, иногда очень нужное. :)


Название: Re: performance analysis and memory leak tools
Отправлено: Mikor от Декабрь 20, 2007, 17:45
Насчет платности VTune небольшой оффтопик.

Как-то подхожу к начальству похвастаться, поставил на ноут все ПО лицензаонное.
- Вот у меня даже OpenOffice стоит, бесплатный лицензионный
- А чем он лучше Microsoft Office?
- Тем что бесплатный!
- А Microsoft Office что? Платный что-ли?? В жизни бы не подумал ))

VTune под Windows есть триал на месяц. За это время его можно и оценить и отказаться и купить и скачать вместе с ключиком. Кому что совесть подскажет...

Из личного опыта скажу, что достаточно соблюдать N простых правил, чтобы не делать типичных ошибок. В статьях Криса Касперски (для тех кто не знает английского) или в книжках Intel описывается какой именно код надо оптимизировать, как надо изначально продумывать алгоритм.
Коль есть сложные алгоритмы, берем Mandelbrot пример, изучаем, пишем аналогичное ) благо проблем с многопотоковостью нет (итак много информации есть в интернете), проблемы с железом Intel и AMD кое-как решили многоядерностью. Дать пользователю время полюбоваться красивым Progress Bar с подписью сколько еще подождать гораздо приятнее, чем он будет тыркать в зависшую на вычислениях программу. Да и реализуется гораздо проще, чем утомительная работа по оптимизации. К тому же, эффект для начальства очевиден, а результаты профилировки до оптимизации и после начальство особо не потрясают.


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Декабрь 20, 2007, 17:59
Все верно, но если это не собственный код, а код кустомера? Тогда и в помощь такие утилиты...


Название: Re: performance analysis and memory leak tools
Отправлено: Sergey B. от Декабрь 20, 2007, 22:11
большое спасибо uriel
Заценил kcachegrind и valgrind --tool=callgrind
 :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D

Такие вот чувства...


Название: Re: performance analysis and memory leak tools
Отправлено: uriel от Декабрь 20, 2007, 22:24
Да не за что, собственно. :)
P.S. Чувства знакомые, у самого такое же было. ;)
Но, кстати, несмотря на всю навороченность KCachegrind'а, некоторые вещи он не позволяет заметить. Например, был случай, когда алгоритм работал недостаточно быстро, а callgrind ничего подходящего не находил. Собрал с ключиком -pg, посмотрел в KProf. Оказалось, что куча циклов тратится в деструкторе QList. Объявил переменную статической и в итоге количество циклов, затраченных на программу в целом уменьшилось в два раза.


Название: Re: performance analysis and memory leak tools
Отправлено: Sergey B. от Декабрь 21, 2007, 00:04
Собрал с ключиком -pg, посмотрел в KProf.

Подскажите пожалуйста, как сказать qmake чтоб она этот ключик в Makefile засунула?
Спасибо.


Название: Re: performance analysis and memory leak tools
Отправлено: ритт от Декабрь 21, 2007, 01:09
QMAKE_CXXFLAGS_DEBUG = -pg
QMAKE_CXXFLAGS_RELEASE = -pg


Название: Re: performance analysis and memory leak tools
Отправлено: uriel от Декабрь 21, 2007, 09:11
А теперь и Вам огромное спасибо за эти переменные. Ведь я знал про них, но всё время правил Makefile руками. :)
Только флагов при компиляции недостаточно (по крайней мере, на моей системе), надо ещё и для линковки задать подобным образом.
QMAKE_LFLAGS_RELEASE += -pg
QMAKE_LFLAGS_DEBUG += -pg


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Январь 08, 2008, 19:43
Кто что может ещё посоветовать под Венду?


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Январь 22, 2008, 15:27
Попробывал Intel VTune Performance Analyzer в действии. Немогу ничего сказать в её поддержку, но и не скажу ничего плохого. Все дело во вкусе ;) Как для меня, эта тулза громоздкая, обладает менее удобным интерфейсом и избыточностью информации (по сравнению с callgrind). После установки тулзы, время от времени VS2005 падала или намертво вешалась. Вобщем пришлось её удалить и перенести проффелирование полностью под Linux.


Название: Re: performance analysis and memory leak tools
Отправлено: Sergey B. от Январь 22, 2008, 16:50
Вот тут про это написано...
http://wiki.qtcentre.org/index.php?title=Profiling (http://wiki.qtcentre.org/index.php?title=Profiling)


Название: Re: performance analysis and memory leak tools
Отправлено: pastor от Февраль 16, 2008, 02:39
Вот попала в поле зрения неплохая статья по valgrind:

Что такое valgrind и зачем он нужен (http://xtalk.msk.su/~ott/ru/linux/valgrind/)


Название: Re: performance analysis and memory leak tools
Отправлено: developer от Март 06, 2008, 17:39
Ребята, я тут лазал по инету и нашел вот такую хорошую прогу AQTime.
Скачать фри версию можна здесь http://automatedqa.com/products/aqtime/index.asp.
Правда прога платная, зато пробная версия полностью рабочая где-то месяц, а потом ее нужно купить.
Думаю есть люди которие ее смогут сламать.


Название: Re: performance analysis and memory leak tools
Отправлено: developer от Март 06, 2008, 17:41
Кстати забыл сказать - она работает под Windows.


Название: Re: performance analysis and memory leak tools
Отправлено: jurtal от Февраль 25, 2010, 12:22
A KCachegrind через apt-get можно поставить? Или надо выкачивать самому, пересобирать и.т.д.?


Название: Re: performance analysis and memory leak tools
Отправлено: BlackTass от Февраль 25, 2010, 15:19
очевидно
Код:
apt-get install kcachegrind


Название: Re: performance analysis and memory leak tools
Отправлено: jurtal от Февраль 25, 2010, 15:27
Получил файл callgrind.out.1234 и запустил kcachegrind callgrind.out.1234
Что то начинает после этого обрабатываться и не перестает.
Может что не так делаю?


Название: Re: performance analysis and memory leak tools
Отправлено: jurtal от Февраль 25, 2010, 15:38
Сорри... Просто от рута надо було запустить...