Комментарии 18
Полезно, попробовал
Эх, помню сам подобное в свое время писал, включая построение карты фрагментированных участков памяти на основании лога. Единственное что, тем кто использует C++ CLI порекомендовал бы задефайнить отдельный оператор вместо new и использовать его для выделения памяти под неуправляемые объекты, во избежание конфликтов.
Это только у меня на слово Leak в последнее время идиосинкразия? ;)
О, о моем VLD написали :-) Значит кому-то он полезен.
Надо время найти баги пофиксить
Надо время найти баги пофиксить
А скажите VLD в VS 2017 работает?
а разве сама студия не предоставляет инструментов для поиска утечек?
Предоставляет msdn.microsoft.com/en-us/library/x98tx3cf.aspx, но нужно вносить кучу изменений в код. Причем она покажет только название функции которая вызвала new (что часто не дает понять причину утечки), а VLD покажет весь CallStack из за которого появилась утечка, причем добавив всего две строчки в код.
Без стека вызовов. Мы используем именно средства студии для юнит тестов, легко понять есть ли утечки или нет. Однако когда понадобилось найти утечки памяти в новом для нас коде, VLD оказался чрезвычайно полезен, потому что понятно не только «есть или нет», но и где.
Спасибо огромное за отличную утилиту, новичкам особенно пригодиться, ну и теперь сам буду юзать её!
Очень полезный инструмент, особенно радует простота подключения при хорошей информативности вывода!
Но обнаружил странное поведение: в простейшем коде утечки выводятся только при Sleep(30000) в конце. Если пауза сильно меньше, или ее нет, то программа так и завершается без вывода информации об утечках. Это баг или следствие неправильного использования? В заголовочном файле не нашел функцию, позволяющую вывести обнаруженные на данный момент утечки.
Но обнаружил странное поведение: в простейшем коде утечки выводятся только при 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();
}
С таким никогда не сталкивался (и лучше бы вам обратиться к текущему разработчику ), но, может, это результат оптимизации компилятора, когда он просто не вызывает создание массивов, если нет других операций впоследствии?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Утечки памяти в С++: Visual Leak Detector