GDB — DBG, чтобы понять, почему PHP-скрипт завис

У меня есть скрипт cron, который висит каждую ночь (при постановке env), но я не могу использовать dgb, как использовал в прошлом.

Вот процесс: ps auxf | grep php

www-data 10187  0.0  0.0   4336   684 ?        Ss   02:00   0:00      \_ /bin/sh -c /usr/bin/php -c /etc/php5/cli/php-zend.ini $BASE/resources/cron/cli.php mtd=generateTSAlarms
www-data 10194  0.8  1.0 303612 43984 ?        t    02:00   3:29          \_ /usr/bin/php -c /etc/php5/cli/php-zend.ini $BASE/resources/cron/cli.php mtd=generateAlarms

php -v:

PHP 5.6.27-0+deb8u1 (cli) (built: Oct 15 2016 15:53:28)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Я беру gdbinit от https://raw.githubusercontent.com/php/php-src/PHP-5.6.27/.gdbinit, и запускаю gbd -p 10194. Я загружаю файл gdbinit и пытаюсь

(gdb) source /home/cedric/php_5.6.27_gdbinit
(gdb) zbacktrace
Attempt to extract a component of a value that is not a structure.
(gdb) bt
#0  0x00007f532b0eef2d in nanosleep () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f532b0eedc4 in __sleep (seconds=0) at ../sysdeps/unix/sysv/linux/sleep.c:137
#2  0x00000000006107ba in zif_sleep ()
#3  0x00000000006e5eaa in dtrace_execute_internal ()
#4  0x00000000007a6860 in ?? ()
#5  0x0000000000734bb0 in execute_ex ()
#6  0x00000000006e5d48 in dtrace_execute_ex ()
#7  0x00000000007a6da3 in ?? ()
#8  0x0000000000734bb0 in execute_ex ()
#9  0x00000000006e5d48 in dtrace_execute_ex ()
#10 0x00000000007a6da3 in ?? ()
#11 0x0000000000734bb0 in execute_ex ()
#12 0x00000000006e5d48 in dtrace_execute_ex ()
#13 0x00000000007a6da3 in ?? ()
#14 0x0000000000734bb0 in execute_ex ()
#15 0x00000000006e5d48 in dtrace_execute_ex ()
#16 0x00000000006f8910 in zend_execute_scripts ()
#17 0x0000000000693cbb in php_execute_script ()
#18 0x00000000007a881b in ?? ()
#19 0x0000000000462bdd in main ()

Почему zbacktrace не работает как это?

1

Решение

Вы можете пропустить символы отладки (в вашем случае, php-cli-dbgsym или аналогичный, в зависимости от версии). Если вы используете Ubuntu, убедитесь, что у вас есть репозитории для пакетов -dbgsym в вашем sources.list (https://wiki.ubuntu.com/DebuggingProgramCrash).

При запуске GDB, он должен сказать перед приглашением:

Reading symbols from php...Reading symbols from /usr/lib/debug/.build-id/8e/6ac5059e812667e453294f1f58e105435d82e8.debug...done.
(gdb)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]