Я уже недавно
ныл про трудности отладки, но внезапно оказалось, что история не закончена! Все получилось прямо как в типичной серии «Доктора Хауса» - если диагноз поставлен в середине серии, то он еще не окончательный.
В общем, проблема в железе действительно была, но не она была причиной наблюдаемых спецэффектов. Все оказалось до смехотворного просто.
Моя программа генерирует скрипт, который с некоторой (неважно какой) целью воздействует на узлы распределенной системы с помощью команды записи в регистр. Таких команд в скрипте несколько тысяч, и каждая из них выглядит примерно так:
mwrite 0xfe 11 0x00103d8 0x0f400f10
Второй аргумент здесь играет роль TTL: сколько коммутаторов нужно пройти пакету до прибытия в пункт назначения. Так вот, оказалось, что независимо от отсутствия или присутствия префикса «0x» этот аргумент трактуется как шестнадцатеричный. В документации это, разумеется, не описано.
Можете представить, какие восхитительные последствия это имело! Для систем диаметром меньше 10 все прекрасно работало, но стоило преодолеть этот рубеж, как все становилось как-то странно. Ну то есть для ближних узлов все вроде бы проходит нормально, но чем дальше узел, с которым мы работаем, тем чудесатее. Я даже грешным делом стал вспоминать про
500-mile email.
Итого: почти неделя работы, пара десятков человек, поднятых на уши, три исправленных символа в вызове fprintf. И непередаваемые чувства в момент нахождения ошибки.
UPD. Через три дня после описанных событий выпустили новую версию команды, которая понимала десятичные числа. Россия стремительным домкратом встает с колен!