отладка приложения fastcgi - PullRequest
3 голосов
/ 19 апреля 2011

Я развернул приложение fastcgi на моем сервере. Когда я пытаюсь запустить его на сервере, происходит сбой (подробнее об этом позже).

Сначала некоторые факты о локальной (dev) машине:

  1. Приложение C / C ++
  2. Я разработал приложение на Ubuntu 10.0.4 LTS (та же ОС на сервере)
  3. Во время разработки я использовал gdb для пошагового выполнения кода для исправления начальных ошибок
  4. Я запускаю ldd в приложении, и все необходимые общие библиотеки найдены
  5. Я могу проверить его на своем локальном компьютере, используя curl http://path/to/cgiapp

После тестирования кода и работы на локальном компьютере я собрал выпускную версию и упаковал ее, используя IDE Netbeans 6.9

Я установил пакет на сервер и запустил следующие тесты

  1. При первом запуске ldd на установленном приложении я заметил, что некоторые файлы не найдены. Я исправил это, скопировав файлы на компьютере разработчика в место, где их искал приложение (возможно, не идеальное) - НО, когда я снова запускаю ldd, все библиотеки были найдены

  2. Затем я протестировал приложение, запустив curl http://path/to/cgiapp на консоли

Вместо ожидаемого сообщения на консоль выглядело то, что выглядело как дамп ядра (т.е. дамп двоичного потока).

Мои вопросы:

  1. Может кто-нибудь объяснить, почему ldd правильно указывает все файлы (загружены?) - и все же приложение вылетает
  2. Что может быть наиболее вероятной причиной того, что приложение работает на моем компьютере разработчика, но не запускается на сервере?
  3. Так как приложение вылетает перед запуском, я не уверен, как использовать gdb для отладки приложения - очевидно, я скопирую отладочную версию на сервер, прежде чем попытаться отладить.

Есть дальнейшие осложнения в отношении пункта 3 выше. Сервер является скудным и подлым, безголовым сервером, поэтому на нем не установлен gdb.

Поэтому, даже если я нашел способ отладки приложения (до его сбоя), я не знаю, как подключиться к удаленному процессу.

Любые идеи о том, как начать разбираться в этом, будут высоко оценены.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Ваш вопрос основан на способе слишком большом количестве недоразумений.

Может кто-нибудь объяснить, почему ldd правильно указывает все файлы (загружены?) - и все же приложение вылетает

По той же причине некоторые приложения запускаются сотни раз без проблем, а затем аварийно завершают работу.

Не все сбои связаны с динамическим компоновщиком, фактически большинство аварий не бывает.Другие ошибки, такие как повреждение кучи, переполнение буфера, ошибки при отключении и т. Д. И т. Д., Встречаются гораздо чаще.

Что может быть наиболее вероятной причиной, по которой приложение работает на моем компьютере?компьютер разработчика, но не запускается на сервере?

Вы не предоставили достаточно данных для ответа на этот вопрос.

Каковы симптомы?Вы смотрели журнал ошибок Apache для подсказок?Что такое трассировка аварийного стека?Какие библиотеки отсутствовали на сервере и были скопированы?

Поскольку приложение аварийно завершает работу перед запуском, я не уверен, как использовать gdb для отладки приложения - очевидно, я скопирую версию отладки всервер, прежде чем я попытаюсь отладить.

Вам не нужно копировать отладочный двоичный файл для его отладки (это может или не может помочь, в зависимости от того, где на самом деле происходит сбой).

0 голосов
/ 20 апреля 2011

Размещение в качестве ответа на запрос автора оригинала:
1. Вы можете скопировать свой дамп ядра на компьютер с помощью gdb и увидеть обратный след. gdb -c имя-ядра имя-двоичного файла, затем bt.
2. Как вы узнаете, что ваше приложение падает перед запуском? Начните записывать вещи в файл, а не полагаться только на живые сеансы GDB.

...