Как мне диагностировать эту ошибку сегментации PHP?

Я запускаю задание PHP из командной строки, которое приводит к ошибке сегментации. Эта работа работала в течение длительного времени, но она обрабатывает то, что отправлено по электронной почте.Что-то в этом письмеэто сломать, но я понятия не имею, что. Если я помещу основной файл в GDB, он 'действительно не поможет

$ gdb /usr/local/bin/php core.20381 
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
...
Reading symbols from /usr/local/bin/php...done.
[New Thread 20381]

warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/libcrypt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /lib/librt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/librt.so.1
Reading symbols from /usr/lib/libmysqlclient_r.so.15...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libmysqlclient_r.so.15
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /lib/libz.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libz.so.1
Reading symbols from /usr/lib/libmcrypt.so.4...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libmcrypt.so.4
Reading symbols from /usr/lib/libltdl.so.7...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libltdl.so.7
Reading symbols from /lib/libpng12.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib/libpng12.so.0
Reading symbols from /lib/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /lib/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libnsl.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /usr/lib/libcurl-gnutls.so.4...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libcurl-gnutls.so.4
Reading symbols from /usr/lib/libxml2.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libxml2.so.2
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/libresolv.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/libresolv.so.2
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /usr/lib/libidn.so.11...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libidn.so.11
Reading symbols from /usr/lib/liblber-2.4.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/liblber-2.4.so.2
Reading symbols from /usr/lib/libldap_r-2.4.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libldap_r-2.4.so.2
Reading symbols from /usr/lib/libgssapi_krb5.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libgssapi_krb5.so.2
Reading symbols from /usr/lib/libgnutls.so.26...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libgnutls.so.26
Reading symbols from /lib/libgcrypt.so.11...(no debugging symbols found)...done.
Loaded symbols for /lib/libgcrypt.so.11
Reading symbols from /usr/lib/libsasl2.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libsasl2.so.2
Reading symbols from /usr/lib/libkrb5.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libkrb5.so.3
Reading symbols from /usr/lib/libk5crypto.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libk5crypto.so.3
Reading symbols from /lib/libcom_err.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/libcom_err.so.2
Reading symbols from /usr/lib/libkrb5support.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libkrb5support.so.0
Reading symbols from /lib/libkeyutils.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libkeyutils.so.1
Reading symbols from /usr/lib/libtasn1.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libtasn1.so.3
Reading symbols from /lib/libgpg-error.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib/libgpg-error.so.0
Reading symbols from /lib/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/libnss_files.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/libnss_files.so.2
Can't read symbols from system-supplied DSO at 0x7fffb4bfc000: File truncated
Core was generated by `/usr/local/bin/php /src/prod/current/utils/cron.php --run=/utils/proces'.
Program terminated with signal 11, Segmentation fault.
#0  match (
    eptr=0x1370a887 "/td>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n", '\t' , "\n\t\t\t\t"..., ecode=0x133dc3aa "N", 
    mstart=0x13708600 "\n\n\n\n\n\n\n
 nneonneo26 окт. 2012 г., 03:16
Похоже, переполнение стека вpreg_match, вероятно, вызвано действительно патологическим вкладом. Вы можете попытаться выяснить, какая строка вашего скрипта вызывает проблему, затем определить входные данные для функции, а затем отправить отчет об ошибке PHP :)
 John Carter05 мая 2013 г., 00:43
Вам удалось решить это? Похоже, тыВы работаете с PHP 5.3.4, выпущенным в декабре 2010 года. Вы пытались обновить его до более поздней версии?

Ответы на вопрос(4)

что команды, в которых я работал, были для PHP7.1, а на сервере это был PHP7.3.

Однажды я запустил их как/usr/bin/php71 они были выполнены без проблем.

Надеюсь, это поможет кому-то :)

если сталкиваюсь с segfault. Я предпочитаю использовать следующую строку:

php -d xdebug.auto_trace=ON -d xdebug.trace_output_dir=mytracedir/ myscript.php

С помощью команды trace-output в mytracedir / вы можете легко определить приблизительную строку php, которая нарушает работу скрипта. Затем переписать строку в одном операторе для каждой строки и использовать error_log () для отладки переменных. Если вы используете __destruct () или __toString (), это может быть немного сложнее.

Увидетьhttp://xdebug.org/docs/execution_trace для получения дополнительной информации.

(Если расширение не загружено, но установлено, попробуйте добавить)php -dzend_extension=xdebug.so [...]

 hakre07 нояб. 2012 г., 13:27
Это тоже рухнет. Хотя этохороший инструмент;)
 hakre09 нояб. 2012 г., 14:27
Хорошо, хорошая мысль. Также вы можете сделать это с помощью xdebug и удаленной отладки. Должна быть возможность начать сеанс в ГБД. +1.
 Trendfischer09 нояб. 2012 г., 14:17
Да, но вы могли видеть, как далеко зашел процесс php до сбоя. Если у вас есть несколько возможных сбоев (PCRE-рекурсия), у вас больше шансов найти правильную. По крайней мере, я бы так сделал ;-)

... rdepth=17680) at /home/farmer/srcs/php-5.3.4/ext/pcre/pcrelib/pcre_exec.c:470

Увидетьpcre.recursion_limit установка:

pcre.recursion_limit - PCRE 'Предел рекурсии. Обратите внимание, что если вы установите это значение на большое число, вы можете использовать весь доступный стек процессов и в конечном итоге привести к сбою PHP (из-за достижения предела размера стека, установленного операционной системой).

Уменьшите его значение, чтобы оно больше не зависало для быстрого исправления. Затем вы увидите, что ваш HTML не полностью обработан регулярным выражением.

Улучшите выражение, чтобы не полагаться на рекурсию так сильно. Вы, вероятно, просто хотите использовать анализатор HTML.

php.ini, включая комментарии в разделе opcache. Пост, который запускает sc, копируется с -c path / php.cli.ini и '-d memory_limit -1 ' параметр

Ваш ответ на вопрос