Russian Qt Forum
Апрель 27, 2024, 07:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как обнаружить течь памяти и падение потока  (Прочитано 3608 раз)
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« : Июнь 18, 2015, 12:06 »

пусть есть сторонняя либа, из нее используется несколько функций (если это важно)
пусть есть поток, который использует эти функции
поток может заесть память или вообще упасть (предполагаем самое худшее)
как можно узнать, что память утекает именно изз тех вызовов в другом потоке и что приложение упало изза того потока ?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июнь 18, 2015, 14:37 »

..как можно узнать, что память утекает именно изз тех вызовов в другом потоке и что приложение упало изза того потока ?
Наверное "как можно доказать" - и наверное необходимость доказывать уже возникла  Улыбающийся
Ищите утилиты для своей платформы. Напр я использую Leaks (Instruments) на OSX и пусть не всегда, но часто он течи находит
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #2 : Июнь 19, 2015, 10:56 »

я думаю никак не доказать, т.к. если память утекла через new в общей кучи, то и не узанаю
а упаду я вместе с потоком
если писать отдельный процесс - это уже перебор, я же не браузер пишу )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 19, 2015, 12:17 »

я думаю никак не доказать, т.к. если память утекла через new в общей кучи, то и не узанаю
Утилиты хранят список распределенных блоков и место в коде кто их выделял - доказать вполне возможно

а упаду я вместе с потоком
Если немаскируемое исключение - то да, но с др стороны это хорошо, т.к. отладчик покажет место выброса. А если С++ исключение, то ничего и падать не обязано - отлавливается в том же потоке через try/catch

Больше оптимизма  Улыбающийся
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #4 : Июнь 19, 2015, 13:01 »

Утилиты хранят список распределенных блоков и место в коде кто их выделял - доказать вполне возможно

я не очень владею этой техникой
пробовал valgrind - очень много сообщений не по делу
да и не пойдет данный способ, нужно выявить данный косяк в реальной работе, например через день текет или падает - кто виноват ?

Если немаскируемое исключение - то да, но с др стороны это хорошо, т.к. отладчик покажет место выброса. А если С++ исключение, то ничего и падать не обязано - отлавливается в том же потоке через try/catch

да, в отладчике все ясно, а как без него ?



Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июнь 19, 2015, 14:07 »

...пробовал valgrind - очень много сообщений не по делу
да и не пойдет данный способ, ...
Ну если заранее настраивать себя на "ничего не выйдет" - зачем тогда вообще начинать? "Умывайте руки" - да и все  Улыбающийся

... в реальной работе, например через день текет или падает...
Для падения есть CrashLog - когда я рассказал какая это классная штука на OSX, линухоиды мне сказали что на линухе он тоже (разумеется) есть. Вот у них и спросите. На Вындоуз - мрачно, не знаю

А так основной метод - вести лог(и). Да, кропотливая работа, но ее никто не отменял
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #6 : Июнь 19, 2015, 14:17 »

Ну если заранее настраивать себя на "ничего не выйдет" - зачем тогда вообще начинать? "Умывайте руки" - да и все  Улыбающийся

ну это с целью не делать бесцельные вещи )
запуск под valgrind тормозит весь процесс в очень много раз, так делать нельзя

Для падения есть CrashLog - когда я рассказал какая это классная штука на OSX, линухоиды мне сказали что на линухе он тоже (разумеется) есть. Вот у них и спросите. На Вындоуз - мрачно, не знаю
А так основной метод - вести лог(и). Да, кропотливая работа, но ее никто не отменял

немного логи ведутся, но не понимаю как это поможет выявить new без delete ?


Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Июнь 19, 2015, 15:29 »

Для винды.

Попробуйте Google Breakpad и Google TCMalloc. Первый - оффлайн-крэшдампер, второй - менеджер памяти с расширенной диагностикой.

Еще рекомендую время от времени запускать CppCheck и Eclipse Codan - это статистические анализаторы кода, они могут выявлять, например, проблемы типа new a[];... delete a; (т.е. когда надо на самом деле delete[] a).
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.