Принудительная ошибка coredump на glib - PullRequest
2 голосов
/ 26 апреля 2011

Когда я запускаю свою программу, я получаю следующую ошибку, и это не произойдет под GDB. Как заставить glibc или ubuntu сбросить ядро ​​при прерывании? Я попытался "ulimit -c безлимитный". Но это не ошибка и не везение. Кроме того, у меня слишком много ошибок памяти в valgrind, исправление которых займет много времени.

Кроме того, установка MALLOC_CHECK_ в 0 не заставляет программу закрываться. Но это не вариант для меня.

* обнаружен glibc ./main: free (): неверный следующий размер (быстрый): 0x0000000000ae0560 **

Редактировать Во всяком случае, я нашел, что именно вызывает эту порочную коррупцию в Valgrind. Просто держите его открытым, чтобы увидеть, возможно ли это.

Ответы [ 2 ]

5 голосов
/ 15 мая 2011

Из документации glibc :

Если для MALLOC_CHECK_ задано значение 0, любое обнаруженное повреждение кучи игнорируется;если установлено в 1, диагностика печатается на stderr;если установлено значение 2, прерывание вызывается немедленно.

При вызове abort() обычно создается дамп ядра (при условии настройки ulimit -c).

3 голосов
/ 26 апреля 2011

Используйте Valgrind для диагностики и устранения проблемы. Это будет быстрее и точнее, поскольку это действительно выглядит как классическая кучная коррупция.

Вероятно, для вашего дистрибутива доступен пакет (Valgrind), если вы используете обычный.

Единственный другой способ создать дамп ядра - подключить GDB к процессу до того, как это произойдет. Но это все еще не приближает вас к решению того, что вызывает проблему. Valgrind - превосходный подход.

...