?

Log in

No account? Create an account
Старые программерские грабли - Логово программиста
March 16th, 2006
02:27 pm

[Link]

Previous Entry Share Next Entry
Старые программерские грабли
Вчера сделал баг и потом весь день искал его. Сегодня продолжил поиски. Баг -- классический "страшный сон программиста" -- программа в какой-то момент просто падает. Без сообщений. Как всегда, фантастические мысли типа "ошибка в компиляторе", а также совершенно феерические ухищрения, чтобы эту ошибку локализовать. Нашел-таки. Причем ведь не очепятка типа минуса вместо плюса или точки вместо запятой. Так что посыпания головы пеплом с криком: "как же я этого не заметил" не будет. Но ляп все равно обидный.

Пойду пообедую и исправлю.

(8 comments | Leave a comment)

Comments
 
[User Picture]
From:chucker_mpa
Date:March 16th, 2006 01:10 pm (UTC)
(Link)
Как ты однажды выразился, падает с "греющим душу сообщением" Segmentation fault? %)))) Это еще хорошо, когда просто падает ;) А когда при этом еще что-нить на винте убивает - становится совсем грустно...
[User Picture]
From:d_byzero
Date:March 16th, 2006 01:21 pm (UTC)
(Link)
Не-а! От этого более-менее понятно, как спасаться. Делаешь так, чтобы было core dumped, потом отладчиком смотришь, на чем свалилось. А тут вывалилось Aborted. Это сообщение по умолчанию на необработанное исключение. Вот и думай, кто его выбросил.
[User Picture]
From:chucker_mpa
Date:March 16th, 2006 03:23 pm (UTC)
(Link)
мда... такого я за все время программирования не видел...
[User Picture]
From:d_byzero
Date:March 17th, 2006 09:43 am (UTC)
(Link)
Ну, тут я сам немного слажался. Основная библтотечная ф-ция, в которой крутится игралка -- это бесконечный цикл. Авторы библиотеки GLUT сделали корректный выход из него невозможным вообще (скорее всего, vdesk будет переписан под QT, и эта проблема будет снята). Я еще не знал всех тонкостей реализации, и тупенько все исключительные ситуации лепил через throw. Потом окзалось, что программа перехватывает такие исключения раньше ловушки, которую я поставил после main'а. И что в итоге? Исключения, которые могут возникнуть до начала отображения картинки, обрабатываются по-людски. А вот все остальные прерывают работу программы с "греющим душу" словом aborted.

Переписывать было лень, да и надобности не было. До этого вот случая.
[User Picture]
From:chucker_mpa
Date:March 17th, 2006 09:55 am (UTC)
(Link)
что значит, что vdesk будет переписан под Qt???? Ты хочешь с ее помощью делать визуализацию?? Этож все переписывать....
[User Picture]
From:d_byzero
Date:March 17th, 2006 10:12 am (UTC)
(Link)
На кой черт переписывать? Там же есть OpenGL виджет. Просто цикл событий будет не GLUT'оский, а QT'шный.
[User Picture]
From:chucker_mpa
Date:March 17th, 2006 11:31 am (UTC)
(Link)
Дык... И правда есть.... запамятоваль... %)
[User Picture]
From:zloy_homyak
Date:March 16th, 2006 01:23 pm (UTC)
(Link)
да-да, ошибка программиста любит. :-)
У меня правда чуть полегче - дотнет и соотв. от фреймворка чуть более информативные сообщения приходят, если уж случился эксепшн и его никто не поймал.
Хуже другое - когда ошибка появляется только в релизе и в таком месте, где ее не должно быть в принципе. Соотв. нет ничего для выдачи сообщений. Catch ее поймал и тишина. :-))
Powered by LiveJournal.com