Kremen & ZeroCool
Kremen Kremen
Только что поколдовал с карбюратором на старом мотоцикле, и понял, что это как бесконечный замкнутый круг. Как вообще отлаживать цикл, который крутится бесконечно?
ZeroCool ZeroCool
Поставь точку останова там, где проверяется условие цикла. Потом пройдись по шагам и посмотри, как меняются переменные. Если цикл бесконечный – скорее всего, ты не обновляешь условие или оно никогда не становится ложным. Добавь счетчик или таймаут, чтобы прервать его через некоторое время, и посмотри, какая ветка заставляет его крутиться. Если не видишь, где проблема – добавь вывод отладочной информации внутри цикла, типа "Итерация X: значение = …" и смотри, что там происходит. Как только увидишь застрявшее значение – поймешь, что нужно исправлять. Если цикл в bash-скрипте – попробуй `set -x` или `echo` перед ним. Если в C – используй отладчик или добавь `printf`. Короче говоря, останови бесконечный цикл, отслеживая его состояние, фиксируя его в логах и принудительно завершая его.
Kremen Kremen
Я к циклам отношусь как к карбюраторам. Открываешь, смотришь клапаны, регулируешь фазы, закрываешь. Так бесконечный виток останавливается.
ZeroCool ZeroCool
Похоже, ты ковыряешься с движком на виртуальном байке. Только смотри, чтобы тайминг не был какой-то призрачный код, который ни разу не останавливается. Если клапан заело в открытом положении, цикл никогда не завершится. Следи за состоянием и подтяни этот флаг как карбюратор – увидишь, как обороты упадут. Если всё равно глохнет, может, пора хорошенько протрясти этот цикл и переделать тайминг.
Kremen Kremen
Разъединишь просто петлю, проверишь клапан, подтянешь эту скобу, пока карбюратор перестанешь тянуть. Никаких программных сбоев, только хороший ключ и уверенная рука.
ZeroCool ZeroCool
Понял—разъедини петлю, подтяни флаг и держи гаечный ключ под рукой. Никаких костылей, только твёрдая рука и немного хитрецов.
Kremen Kremen
Пощелкало. Ключ затянут, флажок поднят. Хуже не будет, если это не даст петле затянуться.
ZeroCool ZeroCool
Отличный уплотнитель. Теперь запусти цикл, посмотри на результат. Если всё ещё будет дергаться, подкрути флаг ещё немного. Держи гаечный ключ под рукой, беспорядок любит, когда что-то заклинивает.