2014-10-11 3 views
4

Хорошо, я запускаю приложение PHP в командной строке на Ubuntu и заканчивается «Ошибка сегментации (core dumped)».Ошибка сегментации (ядро сбрасывается) в PHP

Как мне отсюда отладить его? Я уверен, что утечки памяти нет, поскольку я проверил ее уже с помощью get_memory_usage().

Редактировать: Хорошо, как объяснил Брендан и Ульрихт, я пробовал gdb. Это не моя среда вообще, так жаль новых проблем.

Я запустил свой код под gdb и получил segfault. Вот первые 22 строки.

(gdb) bt 
#0 0x00000000006f5d36 in ??() 
#1 0x00000000006f7625 in ??() 
#2 0x00000000006f7b68 in zend_parse_parameters() 
#3 0x0000000000610584 in zif_array_rand() 
#4 0x00000000006dd9bb in dtrace_execute_internal() 
#5 0x000000000079da15 in ??() 
#6 0x0000000000717748 in execute_ex() 
#7 0x00000000006dd8b9 in dtrace_execute_ex() 
#8 0x000000000079e060 in ??() 
#9 0x0000000000717748 in execute_ex() 
#10 0x00000000006dd8b9 in dtrace_execute_ex() 
#11 0x000000000079e060 in ??() 
#12 0x0000000000717748 in execute_ex() 
#13 0x00000000006dd8b9 in dtrace_execute_ex() 
#14 0x000000000079e060 in ??() 
#15 0x0000000000717748 in execute_ex() 
#16 0x00000000006dd8b9 in dtrace_execute_ex() 
#17 0x000000000079e060 in ??() 
#18 0x0000000000717748 in execute_ex() 
#19 0x00000000006dd8b9 in dtrace_execute_ex() 
#20 0x000000000079e060 in ??() 
#21 0x0000000000717748 in execute_ex() 
#22 0x00000000006dd8b9 in dtrace_execute_ex() 

Согласно https://bugs.php.net/bugs-generating-backtrace.php, я должен получить "выполнить" звонки, а у меня есть "execute_ex". То же самое?

Следующая команда в любом случае не возвращает имя функции (после того, как сделать кадр 6):

print (char *)(executor_globals.function_state_ptr->function)->common.function_name 
Attempt to extract a component of a value that is not a structure. 

edit2: Я бы знать, почему downvote. Я думаю, что это правильный вопрос, и я не нашел подобного для PHP. Если есть, то вы можете прокомментировать.

+0

https://bugs.php.net/bugs-generating-backtrace.php –

+0

http://superuser.com/questions/46259/why-does-php-throw-segmentation-fault-11-after-mysql -connect-or-on-mys –

+0

Это совсем не связано. Эти парни знают, что у него есть segfault из-за mysql, в то время как у меня есть segfault, и я пытаюсь понять, откуда это происходит. – leyou

ответ

2

Есть несколько вещей, чтобы локализовать ошибку, но во-первых, запустить исполняемый файл в БГД:

> gdb /usr/bin/php 
.... 
(gdb) run path/to/script 

Обратите внимание, что вы также можете загрузить сбрасывали ядро ​​в БГД. Другие инструменты для выяснения того, что может вызвать проблему, - это strace и valgrind.

+0

Спасибо, я ответил в своем оригинальном посте. – leyou