• Авторизация


Баги 21-01-2006 12:22 к комментариям - к полной версии - понравилось!


За свою жизнь я выловил немало багов в различных программах, научился терпеливо и кропотливо их выслеживать и убивать, но такого - до сих пор не встречал. Представьте себе:



1. Есть давно написанная и отлаженная программа, которую я портирую для других своих целей
2. Программа работает с аппаратными терминалами - GSM-модемами. Проще говоря, подключаешь мобильный телефон специальным кабелем к компьютеру - и она с ним успешно работает
3. Однако чтобы нормально отлаживать программу, нужно хотя бы два GSM-модема. В качестве первого я взял отцовский профессиональный Wavecom, а в качестве второго - пожертвовал свой SonyEriccson/
4. Подключаем модемы, запускаем программу, вводим инициализационную строку - мой T230 работает нормально, а инициализация Wavecom-а - не проходит, вылетает с ошибкою
5. Начинаю разбираться. Выясняю, что слетает абсолютно безобидная команда AT+CMGL=?, которая всего-то проверяет, что телефон способен работать с памятью SMS-сообщений. Открываю "гипер-терминал" Windows, ввожу ту же инструкцию вручную - всё работает.
6. И что я только потом не делал... Модифицировал код своей программы, перебирая потенциально опасные места; поставил сниффер, дабы проверить, что моя программа меня не обманывает и посылает ровно то, что я прошу, а принимает ровно то, о чём мне говорит; пролистал всю документацию Wavecom.
7. Но всё впустую, - в моей программе не работает, а в режиме ручного ввода, в точности, побайтно повторяющего её действия - без проблем. Наконец, я не выдержал, сдался, и пошёл спать в пятом часу ночи.
8. А на следующее утро проснулся - и за десять минут определил причину неисправности

Оказалось, что

1. Парой десятков команд выше злополучной AT+CGML=? на устройство проходила команда включения AT+CFUN=1. Её задача - включить модем, и она его действительно включала - секунды через две-три после её прохождения модем сообщал OK
2. Однако еще секунд 10 после успешного прохождения AT+CFUN=1, как оказалось, модем выдавал ошибку при попытке задействовать команды из некоторого подмножества стандарта GSM, включая и злополучную AT+CMGL=?. Причём по какому критерию это подмножество возникло - одному Wavecom-у известно: подавляющее большинство команд работало совершенно нормально
3. Программа работает быстро, человек - медленно. Пока я успевал, последовательно проверяя каждое действие программы, дойти от AT+CFUN=1 до AT+CMGL=?, модем успевал "полностью проснуться" и войти в нормальный режим. А в программном режиме - пролетал тот же участок меньше чем за секунду...

Остап был вне себя: землетрясение встало на его пути. Это был единственный случай в его богатой практике.
вверх^ к полной версии понравилось! в evernote
Комментарии (2):
TrickMaster 21-01-2006-20:57 удалить
Если в процессе разработки программы вы наткнулись на баг, который нужно будет очень долго и нудно исправлять, - занесите его в список особенностей программы (с) - Утерянный источник своеобразных советов начинающему программисту...

:)
Ardein 22-01-2006-11:53 удалить
Ну тут кроме "у-ха-ха" мало чего в голову приходит.:) Общий смысл дошел...


Комментарии (2): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Баги | СтранныйКомпьютерщик - Дневник одного компьютерщика | Лента друзей СтранныйКомпьютерщик / Полная версия Добавить в друзья Страницы: раньше»