Как найти ошибку?, Gor, 06-Мрт-07, 21:59 [смотреть все]Всем привет!У меня такой вопрос: Я получил программу, написанную в С и исходники, которая должна работатъ в embedded Linux na embedded Server. Однако программа имеет ошибку и не работает как надо. Сейчас пытаюсъ найти ошибку, просматривая программу и исходники, но ошибку найти не могу. (Я совсем не спец. в программировании, - толъко учусь...) Посоветуйте мне пожалуйста методу, которая мне могла бы помочь. Немного о программе: тест-программа, посылающая актуальное время на один CAN-bus и принимающая их обратно с другого.(CAN-bus соединены между собой) |
- Как найти ошибку?,
NuINu, 10:24 , 07-Мрт-07 (1)>Всем привет! > >У меня такой вопрос: Я получил программу, написанную в С и исходники, >которая должна работатъ в embedded Linux na embedded Server. >Однако программа имеет ошибку и не работает как надо. > >Сейчас пытаюсъ найти ошибку, просматривая программу и исходники, но ошибку найти не >могу. (Я совсем не спец. в программировании, - толъко учусь...) > >Посоветуйте мне пожалуйста методу, которая мне могла бы помочь. Печатай все!!! освой в программировании одну функцию: printf
- Как найти ошибку?,
Gor, 00:00 , 13-Мрт-07 (2)>Печатай все!!! освой в программировании одну функцию: >printf спасибо большое за совет, я смог точнее определить, где программа "виснет". Но почему и как это исправить, пока не нашёл...
- Как найти ошибку?,
Michelnok, 00:35 , 13-Мрт-07 (3)>Но почему и как это исправить, пока не нашёл... Печатай не только место, но и значения переменных, которые могут в этом месте на что-то влиять.
- Как найти ошибку?,
Artem_Korneev, 03:40 , 15-Мрт-07 (4)Что значит виснет? Не отвечает или падает? Можешь воспользоваться отладкой. Либо напрямую, через gdb, либо через вызов gdb из vim/emacs/kdevelop/ddd/что-то ещё.А общий метод тебе подсказали -- локализуй место, в котором происходит зависание и выводи значения всех переменных, которые могут вызвать проблемы.
- Как найти ошибку?,
Gor, 23:09 , 15-Мрт-07 (5)>Что значит виснет? Не отвечает или падает? >Можешь воспользоваться отладкой. Либо напрямую, через gdb, либо через вызов gdb из >vim/emacs/kdevelop/ddd/что-то ещё. > >А общий метод тебе подсказали -- локализуй место, в котором происходит зависание >и выводи значения всех переменных, которые могут вызвать проблемы. Программа запускалась, бус А начинал отсылать телеграммы, в момент когда я включал бус Б на получение телеграмм, происходило терминирование программмы с сигналом на выход не помню сейчас что именно killed.
Дебаггивание осложнялось тем, что на embedded Linux практически ничего нет. Я нашел программу правда, которую можно на нём запустить и параллельно с Ноутбука с помошью gdb дебаггить. Параллельно я кажется нашёл проблему. В программе были использованы threads, которые должны были параллельно работать. В этом случае нужно, как я понял из одной книги, использовать mutex или semafor. После этого я сделал из этой программы две без сложных для меня пока наворотов с вариациями threads,- одна запускающая один бус на отсылку, другая другой бус на приём. Так для меня даже лучше, так как в конечном итоге программы должны были работать на двух разных машинах. И всё заработало! Сейчас надо ещё детали доделать, но в принципе программы работают!
|