Дамп ядра дезинфицирующего средства адреса gcc при ошибке

Я пытаюсь выполнить некоторую отладку на сервере по проблеме, которая, как я подозреваю, связана с переполнением буфера, поэтому я попытался скомпилировать свой код с помощью -fsanitize=address, чтобы включить очистку адресов.

Он скомпилирован, и полученное программное обеспечение запускается. Тем не менее, я пытаюсь получить дамп ядра, когда средство очистки адресов обнаруживает ошибку, поскольку это почти единственный способ получить информацию из системы из-за настройки.

Я вызываю программное обеспечение с ASAN_OPTIONS=abort_on_error=1 в начале командной строки (используя для этого сценарий оболочки) и проверил, что ulimit -c дает неограниченный результат, но он просто не создает дамп ядра.

Что мне не хватает?

Это на сервере Ubuntu 14.04 с gcc версии 4.8.4.

РЕДАКТИРОВАТЬ: sysctl kernel.core_pattern возвращает kernel.core_pattern = |/usr/share/apport/apport %p %s %c %P. Вероятно, это означает, что аппорт включен (по крайней мере, в какой-то форме). Тем не менее, мне удалось получить правильные файлы ядра в этой системе из утверждений и SIGFPE в программном обеспечении (отсюда подозрения в переполнении массива).


person davidv1992    schedule 24.07.2017    source источник
comment
Вы включили apport? Каково значение kernel.core_pattern значения sysctl?   -  person Florian Weimer    schedule 24.07.2017


Ответы (1)


Дайте угадаю, это цель x64? Здесь отключены дампы памяти, чтобы избежать сброса 16 ТБ теневой памяти (см. документацию disable_coredump здесь Детали).

Более новые версии GCC/Clang по умолчанию удаляют тень из ядра, чтобы можно было что-то сделать нравится

export ASAN_OPTIONS=abort_on_error=1:disable_coredump=0

но боюсь 4.8 слишком стар для этого.

В качестве альтернативного предложения, почему вам недостаточно бэктреков? Вы можете использовать log_path или log_to_syslog, чтобы сохранить их, если у вас нет доступа к программам stderr.

NB: я опубликовал предложение включить дампы памяти на всех платформах.

person yugr    schedule 26.07.2017