Russian Qt Forum
Ноябрь 24, 2024, 11:08
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
как обнаружить течь памяти и падение потока
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: как обнаружить течь памяти и падение потока (Прочитано 3809 раз)
qate
Супер
Offline
Сообщений: 1177
как обнаружить течь памяти и падение потока
«
:
Июнь 18, 2015, 12:06 »
пусть есть сторонняя либа, из нее используется несколько функций (если это важно)
пусть есть поток, который использует эти функции
поток может заесть память или вообще упасть (предполагаем самое худшее)
как можно узнать, что память утекает именно изз тех вызовов в другом потоке и что приложение упало изза того потока ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как обнаружить течь памяти и падение потока
«
Ответ #1 :
Июнь 18, 2015, 14:37 »
Цитата: qate от Июнь 18, 2015, 12:06
..как можно узнать, что память утекает именно изз тех вызовов в другом потоке и что приложение упало изза того потока ?
Наверное "как можно доказать" - и наверное необходимость доказывать уже возникла
Ищите утилиты для своей платформы. Напр я использую Leaks (Instruments) на OSX и пусть не всегда, но часто он течи находит
Записан
qate
Супер
Offline
Сообщений: 1177
Re: как обнаружить течь памяти и падение потока
«
Ответ #2 :
Июнь 19, 2015, 10:56 »
я думаю никак не доказать, т.к. если память утекла через new в общей кучи, то и не узанаю
а упаду я вместе с потоком
если писать отдельный процесс - это уже перебор, я же не браузер пишу )
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как обнаружить течь памяти и падение потока
«
Ответ #3 :
Июнь 19, 2015, 12:17 »
Цитата: qate от Июнь 19, 2015, 10:56
я думаю никак не доказать, т.к. если память утекла через new в общей кучи, то и не узанаю
Утилиты хранят список распределенных блоков и место в коде кто их выделял - доказать вполне возможно
Цитата: qate от Июнь 19, 2015, 10:56
а упаду я вместе с потоком
Если немаскируемое исключение - то да, но с др стороны это хорошо, т.к. отладчик покажет место выброса. А если С++ исключение, то ничего и падать не обязано - отлавливается в том же потоке через try/catch
Больше оптимизма
Записан
qate
Супер
Offline
Сообщений: 1177
Re: как обнаружить течь памяти и падение потока
«
Ответ #4 :
Июнь 19, 2015, 13:01 »
Цитата: Igors от Июнь 19, 2015, 12:17
Утилиты хранят список распределенных блоков и место в коде кто их выделял - доказать вполне возможно
я не очень владею этой техникой
пробовал valgrind - очень много сообщений не по делу
да и не пойдет данный способ, нужно выявить данный косяк в реальной работе, например через день текет или падает - кто виноват ?
Цитата: qate от Июнь 19, 2015, 10:56
Если немаскируемое исключение - то да, но с др стороны это хорошо, т.к. отладчик покажет место выброса. А если С++ исключение, то ничего и падать не обязано - отлавливается в том же потоке через try/catch
да, в отладчике все ясно, а как без него ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как обнаружить течь памяти и падение потока
«
Ответ #5 :
Июнь 19, 2015, 14:07 »
Цитата: qate от Июнь 19, 2015, 13:01
...пробовал valgrind - очень много сообщений не по делу
да и не пойдет данный способ, ...
Ну если заранее настраивать себя на "ничего не выйдет" - зачем тогда вообще начинать? "Умывайте руки" - да и все
Цитата: qate от Июнь 19, 2015, 13:01
... в реальной работе, например через день текет или падает...
Для падения есть CrashLog - когда я рассказал какая это классная штука на OSX, линухоиды мне сказали что на линухе он тоже (разумеется) есть. Вот у них и спросите. На Вындоуз - мрачно, не знаю
А так основной метод - вести лог(и). Да, кропотливая работа, но ее никто не отменял
Записан
qate
Супер
Offline
Сообщений: 1177
Re: как обнаружить течь памяти и падение потока
«
Ответ #6 :
Июнь 19, 2015, 14:17 »
Цитата: Igors от Июнь 19, 2015, 14:07
Ну если заранее настраивать себя на "ничего не выйдет" - зачем тогда вообще начинать? "Умывайте руки" - да и все
ну это с целью не делать бесцельные вещи )
запуск под valgrind тормозит весь процесс в очень много раз, так делать нельзя
Цитата: qate от Июнь 19, 2015, 13:01
Для падения есть CrashLog - когда я рассказал какая это классная штука на OSX, линухоиды мне сказали что на линухе он тоже (разумеется) есть. Вот у них и спросите. На Вындоуз - мрачно, не знаю
А так основной метод - вести лог(и). Да, кропотливая работа, но ее никто не отменял
немного логи ведутся, но не понимаю как это поможет выявить new без delete ?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: как обнаружить течь памяти и падение потока
«
Ответ #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
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...