Я сейчас пытаюсь поймать утечку памяти. На форуме мне посоветовали библиотеку VLD. Я посмотрел и понял ее преимущества перед встроенным детектором утечек памяти. Стал встраивать ее в мой проект
#include <vld.h>
Но почему то программа зависает на WIN API функции GetOpenFileName. Пробовал вызывать функцию VLDDisable(). Результат нулевой. Зависание пропадает, когда я из проекта убираю все объявления
#include <vld.h>
Да еще вопрос. Как поймать утечку с помощью данной библиотеки не в основном потоке программы?
Здравствуйте, Melamed, Вы писали:
M>Да еще вопрос. Как поймать утечку с помощью данной библиотеки не в основном потоке программы?
Она корректно ищет утечки во всех потоках. На выходе программы выводятся все call stack для утекшей памяти.
Насчет зависания, с таким не сталкивался. Студия запущена из под админа (run as Administrator в контекстном меню на ярлыке студии)?
Здравствуйте, Melamed, Вы писали:
M>Но почему то программа зависает на WIN API функции GetOpenFileName. Пробовал вызывать функцию VLDDisable(). Результат нулевой. Зависание пропадает, когда я из проекта убираю все объявления
Вангую: может, у вас включена загрузка PDB с Mircosoft Remote Symbol Server (или как он там правильно)? Как я понимаю, дело в том, что Comdlg32.dll грузится лишь при первом обращении к GetOpenFileName и, вероятно, там начинаются какие-то проблемы.
З.Ы. если что, то такие тулзы лучше использовать в релизной сборке с включенными оптимизациями.
M>Я сейчас пытаюсь поймать утечку памяти. На форуме мне посоветовали библиотеку VLD. Я посмотрел и понял ее преимущества перед встроенным детектором утечек памяти. Стал встраивать ее в мой проект
Немного оффтоп. Почему VLD находит утечки только в тех файлах, в которых она подключена? Приходится юзать force include.
Здравствуйте, Zenden, Вы писали:
Z>Немного оффтоп. Почему VLD находит утечки только в тех файлах, в которых она подключена? Приходится юзать force include.
Отнюдь, подключал в main файле. Находилось везде.
> Но почему то программа зависает на WIN API функции GetOpenFileName.
Есть такая бага https://vld.codeplex.com/workitem/9859 . Работаем над проблемой
> Немного оффтоп. Почему VLD находит утечки только в тех файлах, в которых она подключена? Приходится юзать force include.
Потому что VLD нужны гарантии что она будет загружена до и выгружена после всех Dll в которых она подключена. Линковка всех dll с vld позволяет добиться этого.