Про отладку
В коллекцию забавных происшествий при отладке программ добавилось ещё одно.
Из Java запускается C-препроцессор, результат работы которого подается на вход нашей программе. Программа благополучно падает. Ставлю в Eclipse точку останова на запуск препроцессора, запускаю в отладочном режиме — всё работает. Запускаю в боевом режиме — опять падает.
Конечно, дело в том, что Runtime.exec (...) не ждет, пока запущенный процесс закончится. Без точки останова препроцессор не успевал отработать и наша программа банально не находила входных данных.
Попутно выяснилось вот ещё что: если запущенная программа что-нибудь активно пишет на стандартные потоки вывода или ошибок, то данные из них необходимо читать. В противном случае выполнение приостанавливается. По крайней мере на Windows так происходит. С этим я раньше как-то не сталкивался.
А вот что я писал по этому поводу больше трех лет назад:
Коллега пожаловался на мистическое изменение значения переменной в программе на C#. Смотрим, при отладке в MS Visual Studio .NET 2003: значение устанавливается, метод заканчивается, а в объемлющем методе значение уже другое. Шайтан да и только. Я чуть ли не компилятор начал подозревать, а дело было в хитром свойстве (property), значение которого выводилось в окне watch — кроме возвращения значения переменной property обнуляло эту переменную. Автор сказал — на всякий случай...
Обнаружилось странное поведение нашего Add-In'a для этой самой MS Visual Studio .NET 2003 — файлы в проект нашего типа добавляться перестали. Вроде всё работало и ничего не меняли. Потом оказалось, что иногда они всё-таки добавляются — после того, как запускалась сборка проекта. И в окне output, которое появляется после сборки, видна отладочная печать из кода, добавляющего файл. После изучения выяснилось, что проблема как раз в той самой отладочной печати — если окно output ещё не создано, вывод невозможен, возникает исключение, которое внешне никак не проявляется. Но и не работает ничего.
03.07.2007
Метки: Eclipse, Java, отладка Рубрики: Разработка
ЖЖ
Написать комментарий