Ошибка сегментации при запуске программы на C через PHP - PullRequest
0 голосов
/ 13 января 2012

ОС: ubuntu 11.10 Веб-сервер: Apache Код: PHP

Здравствуйте. Я пытаюсь "выполнить" код C через веб-страницу PHP.Когда я запускаю тот же самый код C непосредственно на терминале, он работает нормально, но когда я "исполняю" его через PHP, я получаю ошибку сегментации.

Есть идеи, почему такое поведение?Мой код на C делает небольшие "malloc" в нескольких местах.Тем не менее код прекрасно работает при непосредственном выполнении через терминал с помощью ./a.out

Есть ли способ для меня gdb кода C, когда PHP пытается выполнить его?

Спасибо

Ответы [ 3 ]

1 голос
/ 13 января 2012

Скорее всего, это ошибка прав пользователя.Ваш веб-сервер будет работать от имени другого пользователя (никто, wwwrun или подобный).Попробуйте выполнить su для пользователя веб-сервера и запустить программу на C под этим пользователем.

0 голосов
/ 13 января 2012

Трудно сказать, не видя код. Вы уверены, что ваша программа не течет? Можете ли вы добавить какой-нибудь вывод консоли отладки, чтобы увидеть, когда и где она падает? Ваша программа пытается получить доступ к каким-либо ресурсам (таким как файлы, порты и т. Д.)? Достаточно ли у пользователя веб-сервера (или у того, кто запускает скрипт php) достаточных прав для его правильного выполнения?

0 голосов
/ 13 января 2012

Что вы можете сделать, это разрешить создание файла дампа ядра и прочитать дамп ядра в gdb после сбоя exe.Чтобы включить создание дампов ядра, посмотрите, что делает ulimit.

Кстати: одной из возможных причин сбоя вашей программы могут быть неинициализированные переменные, в частности переменные-указатели.

...