Страница 1 из 1
Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 18:12:55
grot
Здравствуйте, коллеги !
Проблема следующая : есть 3 машины с FreeBSD 6.3 - на двух программа работает,
а на третьей зависает при старте (100% загрузка CPU) без каких либо сообщений об ошибках ...
Я поставил FPC 2.4.2 на "проблемную" машину, все компилируется/собирается - OK.
Но при старте программы - полный завис !
(тестовый пример "Hello, World !" - работает !)
Из особенностей моей программы :
{$IFDEF UNIX}
{$linklib c}
{$linklib pthread}
{$INDIF}
она статически линкует некую библиотеку на С.
(пробовал динамически - все равно виснет !)
Мне кажется все дело в самой системе. Сам я далеко не Unix-гуру.
Эту машину инсталлировал сам - вроде все работает ( Apache 1.3 работает )...
Похоже, программа не может чего-то найти (пути на что ? )
НО НЕ РУГАЕТСЯ ....
Пробовал запускать из gdb - тоже самое...
Куда смотреть, что нажимать ?
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 19:21:03
Vadim
grot
Вы думаете, не видя кода можно немедленно во всём разобраться?
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 19:28:33
Ism
А трассировка на что ?
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 19:33:36
grot
Vadim писал(а):grot
Вы думаете, не видя кода можно немедленно во всём разобраться?
Программа довольно большая (бинарник 1.6 Mb), кода тоже много,
где виснет - я не знаю, сообщений об ошибках -нет ...
Слинкована - статически - зависимостей нет ...
Но на других машинах - ОНА РАБОТАЕТ !!!!
Значит - проблема в машине ...
Это машина - свеше-инсталлированная. Может чего-то не хватает.
Но работает mc, Apache 1.3, захожу туда удаленно по ssh - с виду - все нормально.
Но программа не работает !
Добавлено спустя 2 минуты 25 секунд:Ism писал(а):А трассировка на что ?
Наверное, для этого. Хотя сам ни разу не пользовался.
Можно кратенький пример использования или по каким ключевым словам искать ?
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 20:02:44
Odyssey
Кроме трассировки (которую я не знаю как делать через ssh) можно попробовать вывод сообщений в консоль или log-файл. Выводить статусные сообщения (типа WriteLn('stage 1');), и детализировать их методом дихотомии. Т.е.
1. ставим одно такое сообщение посередине (1/2) основной программы и запускаем
2. если сообщение выводится до зависания - ставим второе сообщение на 3/4, если не выводится - значит, зависает раньше него, следовательно ставим второе сообщение на 1/4.
3. так, пока не дойдём до вызова одной процедуры/функции. Если причина всё ещё непонятна - заходим внутрь этой процедуры/функции, и повторяем то же внутри неё.
Метод медленный, но довольно надёжный и нетребовательный к окружению. Для уменьшения количества загрузок программы на удалённый хост можно делить код более чем на две части, т.е. расставлять побольше сообщений.
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 20:09:17
grot
Odyssey писал(а):Кроме трассировки (которую я не знаю как делать через ssh) можно попробовать вывод сообщений в консоль или log-файл. Выводить статусные сообщения (типа WriteLn('stage 1');), и детализировать их методом дихотомии. Т.е.
1. ставим одно такое сообщение посередине (1/2) основной программы и запускаем
2. если сообщение выводится до зависания - ставим второе сообщение на 3/4, если не выводится - значит, зависает раньше него, следовательно ставим второе сообщение на 1/4.
3. так, пока не дойдём до вызова одной процедуры/функции. Если причина всё ещё непонятна - заходим внутрь этой процедуры/функции, и повторяем то же внутри неё.
Метод медленный, но довольно надёжный и нетребовательный к окружению. Для уменьшения количества загрузок программы на удалённый хост можно делить код более чем на две части, т.е. расставлять побольше сообщений.
Спасибо - попробую...
Компьютер этот у меня сейчас под столом, в локальной сети, с монитором и клавой -
есть способ более "конкрентый" ?
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 20:13:36
Ism
а что делает программа ? с чем работает ? А то "Чтото поставил и не работает" ни к чему не приведет.
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 20:16:34
grot
Ism писал(а):а что делает программа ? с чем работает ? А то "Чтото поставил и не работает" ни к чему не приведет.
Это модуль CGI cо статически прилинкованным SQLite. ( ну и Gzip статический добавлен )
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 22:06:12
Odyssey
grot писал(а):с монитором и клавой - есть способ более "конкрентый" ?
Теоретически - скомпилировать с отладочной информацией, поставить gdb и отлаживать через консоль. Инструкция по использованию gdb есть например
тут. Сам я таким способом не пользовался (и хорошо бы чтоб не пришлось

), поэтому более подробной информацией не располагаю. Если в системе стоит gtk2 или qt (что маловероятно, судя по описанию), можно собрать Lazarus и там (если получится) воспользоваться графическим отладчиком, который фактически представляет собой GUI к gdb.
Re: Проблема с FreeBDS 6.3
Добавлено: 02.03.2011 23:52:15
grot
Похоже, эта проблема решена :
опция fpc -XX (smart linking) действует "странно"... при ее исключении - все заработало !
А дело было так :
открыл проект в текстовом iDE и он ... заработал (т.к. скомпилировался с "другими" опциями)
дальше методом исключения быстро нашлась "проблемная" опция, правда бинарник прибавил 300K ...
Хотя, это больше похоже на обходной маневр, чем на кардинальное решение проблемы !
Исходный вопрос остался нерешенным :
"Почему на 2 из 3 машин "тот" бинарник работал , и , я нутром чую, он бы работал на подавляющем большинстве
"других" машин !?!"
Может функция -XX (smart linking) зависит от конфигурации конкретной системы ?
Re: Проблема с FreeBDS 6.3
Добавлено: 03.03.2011 11:14:41
coyot.rush
Добавьте во все модули директиву {$SMARTLINK OFF} и методом перебора узнаете где "умное связывание" дает сбой.
Вероятнее всего проблемы с подключением со статическим подключение библиотеки на С {$linklib c}, подобное сам встречал помогает {$SMARTLINK OFF} для проблемного модуля