Проблема с FreeBDS 6.3
Модератор: Модераторы
Проблема с FreeBDS 6.3
Здравствуйте, коллеги !
Проблема следующая : есть 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 - тоже самое...
Куда смотреть, что нажимать ?
Проблема следующая : есть 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 - тоже самое...
Куда смотреть, что нажимать ?
grot
Вы думаете, не видя кода можно немедленно во всём разобраться?
Вы думаете, не видя кода можно немедленно во всём разобраться?
А трассировка на что ?
Vadim писал(а):grot
Вы думаете, не видя кода можно немедленно во всём разобраться?
Программа довольно большая (бинарник 1.6 Mb), кода тоже много,
где виснет - я не знаю, сообщений об ошибках -нет ...
Слинкована - статически - зависимостей нет ...
Но на других машинах - ОНА РАБОТАЕТ !!!!
Значит - проблема в машине ...
Это машина - свеше-инсталлированная. Может чего-то не хватает.
Но работает mc, Apache 1.3, захожу туда удаленно по ssh - с виду - все нормально.
Но программа не работает !
Добавлено спустя 2 минуты 25 секунд:
Ism писал(а):А трассировка на что ?
Наверное, для этого. Хотя сам ни разу не пользовался.
Можно кратенький пример использования или по каким ключевым словам искать ?
Кроме трассировки (которую я не знаю как делать через ssh) можно попробовать вывод сообщений в консоль или log-файл. Выводить статусные сообщения (типа WriteLn('stage 1');), и детализировать их методом дихотомии. Т.е.
1. ставим одно такое сообщение посередине (1/2) основной программы и запускаем
2. если сообщение выводится до зависания - ставим второе сообщение на 3/4, если не выводится - значит, зависает раньше него, следовательно ставим второе сообщение на 1/4.
3. так, пока не дойдём до вызова одной процедуры/функции. Если причина всё ещё непонятна - заходим внутрь этой процедуры/функции, и повторяем то же внутри неё.
Метод медленный, но довольно надёжный и нетребовательный к окружению. Для уменьшения количества загрузок программы на удалённый хост можно делить код более чем на две части, т.е. расставлять побольше сообщений.
1. ставим одно такое сообщение посередине (1/2) основной программы и запускаем
2. если сообщение выводится до зависания - ставим второе сообщение на 3/4, если не выводится - значит, зависает раньше него, следовательно ставим второе сообщение на 1/4.
3. так, пока не дойдём до вызова одной процедуры/функции. Если причина всё ещё непонятна - заходим внутрь этой процедуры/функции, и повторяем то же внутри неё.
Метод медленный, но довольно надёжный и нетребовательный к окружению. Для уменьшения количества загрузок программы на удалённый хост можно делить код более чем на две части, т.е. расставлять побольше сообщений.
Odyssey писал(а):Кроме трассировки (которую я не знаю как делать через ssh) можно попробовать вывод сообщений в консоль или log-файл. Выводить статусные сообщения (типа WriteLn('stage 1');), и детализировать их методом дихотомии. Т.е.
1. ставим одно такое сообщение посередине (1/2) основной программы и запускаем
2. если сообщение выводится до зависания - ставим второе сообщение на 3/4, если не выводится - значит, зависает раньше него, следовательно ставим второе сообщение на 1/4.
3. так, пока не дойдём до вызова одной процедуры/функции. Если причина всё ещё непонятна - заходим внутрь этой процедуры/функции, и повторяем то же внутри неё.
Метод медленный, но довольно надёжный и нетребовательный к окружению. Для уменьшения количества загрузок программы на удалённый хост можно делить код более чем на две части, т.е. расставлять побольше сообщений.
Спасибо - попробую...
Компьютер этот у меня сейчас под столом, в локальной сети, с монитором и клавой -
есть способ более "конкрентый" ?
а что делает программа ? с чем работает ? А то "Чтото поставил и не работает" ни к чему не приведет.
Ism писал(а):а что делает программа ? с чем работает ? А то "Чтото поставил и не работает" ни к чему не приведет.
Это модуль CGI cо статически прилинкованным SQLite. ( ну и Gzip статический добавлен )
grot писал(а):с монитором и клавой - есть способ более "конкрентый" ?
Теоретически - скомпилировать с отладочной информацией, поставить gdb и отлаживать через консоль. Инструкция по использованию gdb есть например тут. Сам я таким способом не пользовался (и хорошо бы чтоб не пришлось
Похоже, эта проблема решена :
опция fpc -XX (smart linking) действует "странно"... при ее исключении - все заработало !
А дело было так :
открыл проект в текстовом iDE и он ... заработал (т.к. скомпилировался с "другими" опциями)
дальше методом исключения быстро нашлась "проблемная" опция, правда бинарник прибавил 300K ...
Хотя, это больше похоже на обходной маневр, чем на кардинальное решение проблемы !
Исходный вопрос остался нерешенным :
"Почему на 2 из 3 машин "тот" бинарник работал , и , я нутром чую, он бы работал на подавляющем большинстве
"других" машин !?!"
Может функция -XX (smart linking) зависит от конфигурации конкретной системы ?
опция fpc -XX (smart linking) действует "странно"... при ее исключении - все заработало !
А дело было так :
открыл проект в текстовом iDE и он ... заработал (т.к. скомпилировался с "другими" опциями)
дальше методом исключения быстро нашлась "проблемная" опция, правда бинарник прибавил 300K ...
Хотя, это больше похоже на обходной маневр, чем на кардинальное решение проблемы !
Исходный вопрос остался нерешенным :
"Почему на 2 из 3 машин "тот" бинарник работал , и , я нутром чую, он бы работал на подавляющем большинстве
"других" машин !?!"
Может функция -XX (smart linking) зависит от конфигурации конкретной системы ?
- coyot.rush
- постоялец
- Сообщения: 309
- Зарегистрирован: 14.08.2009 08:59:48
Добавьте во все модули директиву {$SMARTLINK OFF} и методом перебора узнаете где "умное связывание" дает сбой.
Вероятнее всего проблемы с подключением со статическим подключение библиотеки на С {$linklib c}, подобное сам встречал помогает {$SMARTLINK OFF} для проблемного модуля
Вероятнее всего проблемы с подключением со статическим подключение библиотеки на С {$linklib c}, подобное сам встречал помогает {$SMARTLINK OFF} для проблемного модуля
