Как стать автором
Обновить

Комментарии 18

Полезно, попробовал
Эх, помню сам подобное в свое время писал, включая построение карты фрагментированных участков памяти на основании лога. Единственное что, тем кто использует C++ CLI порекомендовал бы задефайнить отдельный оператор вместо new и использовать его для выделения памяти под неуправляемые объекты, во избежание конфликтов.
Это только у меня на слово Leak в последнее время идиосинкразия? ;)
О, о моем VLD написали :-) Значит кому-то он полезен.
Надо время найти баги пофиксить
НЛО прилетело и опубликовало эту надпись здесь
Как feature request хотелось бы поддежку resource leaks.

Какого типа ресурсов? Различного рода GDI ресурсов или что?
НЛО прилетело и опубликовало эту надпись здесь
Ok, посмотрим что можно сделать.
Если у вас будет время, то гляньте, пожалуйста, мой пост. Не смог понять, баг это или неправильное использование.
Извините за задержку с ответом. Нашел время на исправления багов, но ваш воспроизвести не смог. У меня и без Sleep все стабильно работает. Win7 x64, VS 2010.
А скажите VLD в VS 2017 работает?
а разве сама студия не предоставляет инструментов для поиска утечек?
Предоставляет msdn.microsoft.com/en-us/library/x98tx3cf.aspx, но нужно вносить кучу изменений в код. Причем она покажет только название функции которая вызвала new (что часто не дает понять причину утечки), а VLD покажет весь CallStack из за которого появилась утечка, причем добавив всего две строчки в код.
Без стека вызовов. Мы используем именно средства студии для юнит тестов, легко понять есть ли утечки или нет. Однако когда понадобилось найти утечки памяти в новом для нас коде, VLD оказался чрезвычайно полезен, потому что понятно не только «есть или нет», но и где.
Спасибо огромное за отличную утилиту, новичкам особенно пригодиться, ну и теперь сам буду юзать её!
Очень полезный инструмент, особенно радует простота подключения при хорошей информативности вывода!

Но обнаружил странное поведение: в простейшем коде утечки выводятся только при Sleep(30000) в конце. Если пауза сильно меньше, или ее нет, то программа так и завершается без вывода информации об утечках. Это баг или следствие неправильного использования? В заголовочном файле не нашел функцию, позволяющую вывести обнаруженные на данный момент утечки.

#include <windows.h>
#include <vld.h>

void TestVld()
{
for (size_t i = 0; i < 10; i++)
{
int *p = new int[1UL<<i];
}
Sleep(30000);
}

int main()
{
TestVld();
}

С таким никогда не сталкивался (и лучше бы вам обратиться к текущему разработчику ), но, может, это результат оптимизации компилятора, когда он просто не вызывает создание массивов, если нет других операций впоследствии?
Оптимизация отключена, запускалась Debug сборка.
Кроме того, воспроизводимость проблемы носит вероятностных характер: чем меньше пауза, тем меньше шансов, что выведет утечки.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории