Ответ 1
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/libSegFault.so someapp
Обратите внимание, что фактический путь к библиотеке предварительной загрузки может отличаться. На моей машине я использовал бы
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so some-64bit-app
или
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/i386-linux-gnu/libSegFault.so some-32bit-app
в зависимости от того, выполнялось ли приложение, которое я запускал, было скомпилировано 64-битное или 32-битное. (Вы можете использовать file
для проверки.)
source сообщает, что существуют три переменные среды, которые определяют поведение libSegFault.so
:
-
SEGFAULT_SIGNALS
: список сигналов, которые вызывают трассировку стека. По умолчанию используетсяSIGSEGV
. Определенный, но пустойSEGFAULT_SIGNALS
означает, что никакие сигналы не вызывают трассировку стека. Поддерживаемые значенияsegv
,ill
,abrt
,fpe
,bus
для систем, которые имеют сигнал SIGBUS,stkflt
для систем, имеющих сигнал SIGSTKFLT, иall
для всех этих. -
SEGFAULT_USE_ALTSTACK
: Если определено в среде,libSegFault.so
использует альтенный стек для сигналов трассировки стека. Это может пригодиться, если вы отлаживаете повреждение стека. -
SEGFAULT_OUTPUT_NAME
: Если определено в среде, трассировка стека записывается в этот файл вместо стандартной ошибки.
Честно говоря, я сначала нашел их, изучив библиотеку с помощью strings /lib/libSegFault.so | sed -e '/[^0-9A-Z_]/ d'
. Все стандартные библиотеки (libSegFault.so
, ставшие частью библиотеки GNU C) настраиваются через переменные среды, поэтому использование чего-то вроде этой команды для выгрузки любых строк, которые выглядят как имена переменных среды, - это быстрый способ найти материал для поиска. Выполнение веб-поиска по "SEGFAULT_SIGNALS" "SEGFAULT_OUTPUT_NAME"
создает ряд полезных ссылок; видя, что он был частью библиотеки GNU C в настоящее время, я перешел в архивы source git, нашел фактический исходный файл для библиотеки, и отправил мой ответ.