… и концы в воду

Эта неделя началась замечательно, - а именно с безуспешных попыток выяснить, почему валиться билд. Надо сказать, что и в невоенное-то время разобраться, что именно поломалось бывает непросто. Но в этот раз все было еще веселее чем обычно. Некая утилита (не будем показывать пальцем, хотя утилита написана на .NET :-) ), выдавала примерно следующий лог:

...
> FooBar: parsing Z:\temp\tmp1234.tmp
> FooBar: error XXXX, line 123, Z:\temp\tmp1234.tmp
...

Небольшая заминка была только в том, что утилита аккуратно удаляла «Z:\temp\tmp1234.tmp» вслед за неудачной попыткой его разбора. Действительно, кому придет в голову посмотреть, что там в линии 123, если этот файл и не парсится-то толком, правда?

Ну, файл мы, конечно, восстановили, с проблемой разобрались, но осадок остался. О чем думал писавший эту утилиту не понятно. К сожалению, это далеко не единственный случай, когда возможность понять что произошло приносится в жертву, эээ…, стремлению прибраться за собой. Хотите примеров? Их есть у меня.

nmake.exe позволяет создавать временные файлы с помощью вот такого синтаксиса:

<<
abc
123
<<[KEEP | NOKEEP]

Во время выполнения, текст между скобками копируется в файл, имя которого подставляется в выполняемую команду. Опции KEEP и NOKEEP указывают время жизни файла. По-умолчанию или если указана опция NOKEEP, файл будет удален по завершению выполнения всех команд. Кроме невозможности посмотреть содержимое этого файла (между скобками можно использовать макросы), это означает, что при случае, разработчик не сможет просто скопировать ошибочную команду из лога, чтобы повторить её. Вместо этого ему придется запускать нужную команду или всю последовательность команд через nmake. Это может показаться не очень большой проблемой, но только до того момента, как вам придется разбираться почему вдруг не собирается компонент написанный не понятно кем, несколько лет назад и ни разу не менявшийся с тех пор.

Похожие проблемы возникают сплошь и рядом там, где создаются разного рода response файлы, позволяющие обойти ограничение на размер командной строки. Почему-то авторы скриптов любят их удалять после завершения компиляции. Зачем? Не понятно.

comments powered by Disqus