tag:blogger.com,1999:blog-3179964835593137794.post806603210665283087..comments2022-04-09T14:53:02.942+03:00Comments on Распутывая нити: uleakAndrey Valyaevhttp://www.blogger.com/profile/05020625213099509709noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-3179964835593137794.post-22704558720800156582009-10-22T10:59:24.099+04:002009-10-22T10:59:24.099+04:002 Андрей Валяев:
ну тогда это не совсем верно. Да...2 Андрей Валяев:<br /><br />ну тогда это не совсем верно. Даже в нормальном режиме valgrind сообщает об этой утечке в LEAK SUMMARY, а если запускать его с --leak-check=full, то он напишет и точное местоположение:<br /><br />$ cat hello-malloc.c <br />#include <stdlib.h><br /><br />int main() {<br /> malloc(100);<br /> return 0;<br />}<br />$ gcc hello-malloc.c -o hello-malloc<br />$ valgrind --leak-check=full ./hello-malloc<br />==31547== Memcheck, a memory error detector<br />==31547== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.<br />...<br />==31547== <br />==31547== HEAP SUMMARY:<br />==31547== in use at exit: 100 bytes in 1 blocks<br />==31547== total heap usage: 1 allocs, 0 frees, 100 bytes allocated<br />==31547== <br />==31547== 100 bytes in 1 blocks are definitely lost in loss record 1 of 1<br />==31547== at 0x4C246F5: malloc /tmp/vg/coregrind/m_replacemalloc/vg_replace_malloc.c:195<br />==31547== by 0x4004A5: main in /home/glider/hello-malloc<br />==31547== <br />==31547== LEAK SUMMARY:<br />==31547== definitely lost: 100 bytes in 1 blocks<br />==31547== indirectly lost: 0 bytes in 0 blocks<br />==31547== possibly lost: 0 bytes in 0 blocks<br />==31547== still reachable: 0 bytes in 0 blocks<br />==31547== suppressed: 0 bytes in 0 blocks<br />==31547== <br />==31547== For counts of detected and suppressed errors, rerun with: -v<br />==31547== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)<br /><br />Другое дело, что это медленнее, чем подменять библиотечные функции, но зато довольно-таки надежно.Gliderhttps://www.blogger.com/profile/17745886775490869983noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-88328172882397401032009-10-21T22:15:54.945+04:002009-10-21T22:15:54.945+04:002Glider: Ну это я так образно выразился... предпол...2Glider: Ну это я так образно выразился... предполагая программу следующего вида:<br /><br />main() {<br /> malloc(100);<br />}Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-60169935756366072712009-10-21T20:10:44.780+04:002009-10-21T20:10:44.780+04:00>>valgrind даже hello malloc почему-то не ло...>>valgrind даже hello malloc почему-то не ловит<br /><br />Поясните, пожалуйста, что такое есть hello malloc?Gliderhttps://www.blogger.com/profile/17745886775490869983noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-3284077166340208252009-04-21T16:52:00.000+04:002009-04-21T16:52:00.000+04:00Андрей, на мой взгляд, корректное именование - оди...Андрей, на мой взгляд, корректное именование - один из главнейших поинтов в программировании. Как-то слышал выражение - "программирование - это умение давать имена сущностям"... или что-то вроде этого ))<br /><br />2 Morbo<br />Да, для него главной проблемой было отсутствие буквы e в конце creat, а не отсутствие нормальных примитивов синхронизации и асинхронного ввода-вывода :-D<br /><br />Из подобного могу вспомнить еще высказывание Линуса "message passing as the fundamental operation of the OS is just an excercise in computer science masturbation"... чувак просто не знал, что "QNX is a message-passing operating system".coffnoreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-41541450597055117362009-03-10T14:57:00.000+03:002009-03-10T14:57:00.000+03:002coff: Как менеджер кучи uleak будет плох... он ме...2coff: Как менеджер кучи uleak будет плох... он медленный.<BR/><BR/>2morbo: Да в принципе название то не главное... но просто хочется чтобы оно было сколько нибудь благозвучно, и запоминаемо.<BR/><BR/>В принципе если в названии есть какая-то неправильность - оно запоминается лучше. :)Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-26287350549960332762009-03-10T14:17:00.000+03:002009-03-10T14:17:00.000+03:00Разработчику Unix однажды задали вопрос: "Что бы в...Разработчику Unix однажды задали вопрос: "Что бы вы переделали в Unix, если бы сейчас начали делать его снова?" Он ответил: "Я бы написал системный вызов creat с буквой e в конце названия."<BR/><BR/>Это к тому, что экономия на буквах не всегда оправдана в эстетическом плане и umount, на мой взгляд, тоже следовало бы назвать хотя бы unmount. Может быть и unleak звучало бы лучше?morbohttps://www.blogger.com/profile/16650057587203469226noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-1670005258486912432009-02-24T18:21:00.000+03:002009-02-24T18:21:00.000+03:00И заметь, я не говорю, что "не нужно делать, уже в...И заметь, я не говорю, что "не нужно делать, уже все есть". Наоборот, я был бы только рад нормальному фришному менеджеру кучи. Сам бы рад написать, но пока руки не доходят.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-14716843424858091872009-02-24T18:10:00.000+03:002009-02-24T18:10:00.000+03:00Если интересует инфа, посмотри в MSDN по _CrtDumpM...Если интересует инфа, посмотри в MSDN по _CrtDumpMemoryLeaks/_CrtSetDumpClient, _CrtSetAllocHook, _CrtDoForAllClientObjects, _CrtMemCheckpoint/_CrtMemDumpAllObjectsSince, _CrtSetBreakAlloc, _CrtSetReportMode/_CrtSetReportFile, и т.д.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-1717869427762941132009-02-24T18:02:00.000+03:002009-02-24T18:02:00.000+03:00Нет, не отладчик, а crt с поддержкой debug heap. Г...Нет, не отладчик, а crt с поддержкой debug heap. Грубо говоря, те же malloc, но с дополнительной информацией по каждому блоку...плюс guard-области. Ставишь hook на операции с памятью и мониторишь из той же проги. Можно перечислить выделенные клиентские блоки (причем crt может использовать твою процедуру), собирай статистику, какую тебе надо.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-60975001707271530562009-02-24T15:36:00.000+03:002009-02-24T15:36:00.000+03:002Alex Ott: Я вот тоже что-то не особо представляю ...2Alex Ott: Я вот тоже что-то не особо представляю как это дело можно точно отследить. :)<BR/><BR/>Так, теории всякие строю.<BR/><BR/>2coff: В том то и проблема, что от сырого дампа толку мало... как и от сырого лога. Чтобы извлечь из всего этого какую-то пользу - надо его как-то обработать. суть проблемы извлечь таксказать.<BR/><BR/>Я вообще не особо люблю просто логи. Ради отладки приложение должно выдавать концентрированную/отфильтрованную информацию, компьютер - он железный, ему не трудно поработать над этим. :)Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-15291154089351039022009-02-24T15:25:00.000+03:002009-02-24T15:25:00.000+03:002coff: ну-ну - даже не представляю как будет ловит...2coff: ну-ну - даже не представляю как будет ловиться утечка памяти в программе, которая обслуживает многие тысячи коннекшенов одновременно. Простые случаи элементарно ловятся и другими средствами, а вот при высокой нагрузке уже отладчик особо не помогаетAlex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-80881185558852592322009-02-24T15:11:00.000+03:002009-02-24T15:11:00.000+03:00Мама!!! :-D Как хорошо на MSVC... там crt debug he...Мама!!! :-D Как хорошо на MSVC... там crt debug heap и утечки, и выход за границы, и использование после освобождения ловит, и еще делает много чего полезного... ))) Дает дамп списка блоков после некоторого момента, если нужно определить, не оставляет ли какая-либо конкрентная функция утечек. Инфу о куче любую выдает. Позволяет добавлять хуки на операции с кучей. Разные типы блоков в куче, с возможностью вызова коллбэка для каждого клиентского блока.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-43556453801732197592009-01-28T23:58:00.000+03:002009-01-28T23:58:00.000+03:00ну российская ИБ тусовка достаточно маленькая :-) ...ну российская ИБ тусовка достаточно маленькая :-) я все-таки долго в этой области в россии работал, да и сейчас общаюсьAlex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-38646007423271299212009-01-28T23:55:00.000+03:002009-01-28T23:55:00.000+03:00Как тесен мир... :)Как тесен мир... :)Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-45239129552957504362009-01-28T23:32:00.000+03:002009-01-28T23:32:00.000+03:00и сталкивался по работе у клиентов, да и blaze - м...и сталкивался по работе у клиентов, да и blaze - мой хороший знакомый :-)Alex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-43964769648228067602009-01-28T22:56:00.000+03:002009-01-28T22:56:00.000+03:00Сталкивался с континентом по работе?Сталкивался с континентом по работе?Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-66534594053899564722009-01-28T22:15:00.000+03:002009-01-28T22:15:00.000+03:00ну я dmalloc на фре не проверял, так что не скажу....ну я dmalloc на фре не проверял, так что не скажу...<BR/>P.S. а то, что ваше приложение работает на голой фре - это я хорошо знаю :-)Alex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-56070267994885027592009-01-28T22:13:00.000+03:002009-01-28T22:13:00.000+03:00dmalloc я не пробовал. На первый взгляд весьма нав...dmalloc я не пробовал. На первый взгляд весьма наворочанно.<BR/><BR/>tcmalloc мне тоже ничем не помог. Я писал, что мое приложение статическое, работает в голой FreeBSD и с отладкой там туго.<BR/><BR/>PS: что-то у меня dmalloc не работает. :)<BR/><BR/>$ LD_PRELOAD="/usr/lib/libdmalloccxx.so" firefox<BR/>/bin/sh: symbol lookup error: /usr/lib/libdmalloccxx.so: undefined symbol: __gxx_personality_v0<BR/>$ LD_PRELOAD="/usr/lib/libdmalloc.so" firefox<BR/>Ошибка сегментирования<BR/>$<BR/><BR/>Че-то не уровень.<BR/><BR/>uleak конечно не умеет еще конфигуриться в рантайме, не придумал как это лучше сделать, наверное через окружение вполне возможно.<BR/><BR/>С протоколами (файлами всмысле) сложно. во FreeBSD malloc вызывается чуть ли не из ядра, чуть что не так - бесконечная рекурсия... сложно с ней.<BR/><BR/>В linux как то все проще устроено.Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-82865044495272860852009-01-28T21:47:00.000+03:002009-01-28T21:47:00.000+03:00ну есть google performance tools, которые вполне с...ну есть google performance tools, которые вполне себе отлавливаю утечки. а для отслеживания обращения к освобожденным блокам есть dmalloc и т.п. см - http://xtalk.msk.su/~ott/ru/writings/prog-checking/<BR/>но на uleak я тоже посмотрю - я как раз ловлю очередную утечку, правда она похоже в чужой библиотеке, которая нам поставляется в бинарном видеAlex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-5110421338853510482009-01-28T21:44:00.000+03:002009-01-28T21:44:00.000+03:00О, ко мне зашел сам Alex Ott!!! :)Да что-то они мн...О, ко мне зашел сам Alex Ott!!! :)<BR/><BR/>Да что-то они мне ничем не помогают... :) valgrind даже hello malloc почему-то не ловит. :) Кроме того утечка - не самая страшная проблема. программы от нее если и падают, то не сразу.<BR/><BR/>А вот например использование блока после освобождения никто вроде не ловит. uleak ловит. Переполнение блоков тоже ловит.<BR/><BR/>Он еще очень сырой, но firefox с ним уже запускается.<BR/><BR/>А с другой стороны может это просто из желания все делать по своему? не знаю... :)Андрей Валяевhttps://www.blogger.com/profile/11584397745995226795noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-80995466772423909012009-01-28T18:08:00.000+03:002009-01-28T18:08:00.000+03:00а чем не устраивают существующие библиотеки для по...а чем не устраивают существующие библиотеки для поиска утечек?Alex Otthttps://www.blogger.com/profile/13001951608173211050noreply@blogger.com