Баги
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