Назад | Перейти на главную страницу

Ошибка сегментации Apache: как получить дополнительную информацию с помощью gdb?

Я вижу следующую ошибку в error_log apache. Это совершенно случайно, но когда это происходит, он печатает 10-20 строк в error_log.

Apache: [core:notice] [pid ***] AH00052: child pid *** exit signal Segmentation fault (11)

Я использую Apache 2.4.12 и PHP 5.4.36.

Я попытался использовать gdb 7.8 для сбора дополнительной информации. После подключения к процессу apache я ждал и наконец получил ошибку сегментации:

(gdb) attach 205907
Attaching to process 205907
Reading symbols from /usr/local/apache2/bin/httpd...done.
Reading symbols from /lib64/libpcre.so.0...(no debugging symbols found)...done.

... lots of reading symbols ...

(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x00007f7508acc4fe in __longjmp () from /lib64/libc.so.6
(gdb) backtrace
#0  0x00007f7508acc4fe in __longjmp () from /lib64/libc.so.6
#1  0xb7e28fbf1b781194 in ?? ()
Backtrace stopped: Cannot access memory at address 0xdf5a8fbf24c295cc
(gdb) backtrace full
#0  0x00007f7508acc4fe in __longjmp () from /lib64/libc.so.6
No symbol table info available.
#1  0xb7e28fbf1b781194 in ?? ()
No symbol table info available.
Backtrace stopped: Cannot access memory at address 0xdf5a8fbf24c295cc

К сожалению, результат оказался не таким, как я ожидал. Что мне делать, чтобы получить больше информации об ошибке сегментации?

Поскольку у вас есть sig11 внутри libc и маловероятно, что у него будет такая простая ошибка запуска, я бы посоветовал вам использовать memtest86 + для проверки памяти вашего сервера.

Вам нужна отладочная версия libc и, возможно, для /lib64/libpcre.so.0 ... Из вашего вывода:

/lib64/libpcre.so.0...(no debugging symbols found)

Надеюсь, этот пост может быть вам полезен:

Как использовать отладочную версию libc

[https://stackoverflow.com/questions/10000335/how-to-use-debug-version-of-libc]