Привет, хабрасообщество!
Хочу рассказать о небольшой проблеме, с которой сегодня столкнулся.
Бывает, программа валится, выдавая строку, начинающуюся с "*** glibc detected ***" и сопровождающуюся большим количеством служебной информации. Дело в том, что в glibc есть собственный менеджер памяти, который в случае попытки освобождения невыделенной памяти начинает паниковать и думать, что порушились внутренние структуры менеджера памяти.
Конечно, правильным путем решения тут будет отдебажить программу, найти ошибку и/или сообщить об этом разработчику. Но иногда результат нужен срочно, и нет времени заниматься этим. В этом случае можно попробовать переключить менеджер памяти glibc в другой режим, менее производительный, но более устойчивый к подобным ошибкам программистов. Сделать это можно так:
Значение «0» заставляет полностью игнорировать подобные ошибки, «1» — выводить сообщения о них в stderr, «2» — завершать программу при обнаружении ошибки.
Работает в Linux libc новее, чем 5.4.23 и GNU libc 2.x.
Хочу рассказать о небольшой проблеме, с которой сегодня столкнулся.
Бывает, программа валится, выдавая строку, начинающуюся с "*** glibc detected ***" и сопровождающуюся большим количеством служебной информации. Дело в том, что в glibc есть собственный менеджер памяти, который в случае попытки освобождения невыделенной памяти начинает паниковать и думать, что порушились внутренние структуры менеджера памяти.
Конечно, правильным путем решения тут будет отдебажить программу, найти ошибку и/или сообщить об этом разработчику. Но иногда результат нужен срочно, и нет времени заниматься этим. В этом случае можно попробовать переключить менеджер памяти glibc в другой режим, менее производительный, но более устойчивый к подобным ошибкам программистов. Сделать это можно так:
MALLOC_CHECK_=0 /path/to/program
Значение «0» заставляет полностью игнорировать подобные ошибки, «1» — выводить сообщения о них в stderr, «2» — завершать программу при обнаружении ошибки.
Работает в Linux libc новее, чем 5.4.23 и GNU libc 2.x.