2012-05-21 4 views
1

Я точно не знаю, что я сделал, но, похоже, я сломал свою систему сборки.Как проследить, какой файл вызывает синтаксическую ошибку?

$ scons install 
scons: Reading SConscript files ... 
File "<string>", line 1 

I_���.�K 
     H�4����Ǐ��U)�f���R�f���ў�U)�f���R�f���ў� 

^

SyntaxError: invalid syntax 

Непризнанные символы предназначены.

Плохо: Даже сброс на «известную как рабочую» версию не помогает, а также использует такие параметры, как --debug=stacktrace. Моя система управления версиями (mercurial) не показывает изменений в файлах SCons, и я не знаю, как это сделать. Любые намеки, как сделать mercurial печатать имена файлов, над которыми он работает, чтобы узнать, что происходит?

Следующим шагом будет сделать новый клон проекта (который, мы надеемся, построит), но мне любопытно, что здесь не так.

UPDATE

Проблема исчезла, когда я обновлен до Ubuntu 12.04. «Исчезновение» означает в этом случае, что внезапно я смог выполнить команду scons --clean, после чего мне снова удалось перестроить проект. К сожалению, я не могу воспроизвести ошибку, так что, наконец, я не знаю, что вызвало ее, потому что она работала несколько месяцев, и ни у кого из моих коллег не было такой странной ошибки.

Это отрывок из моего сценария:

vars = Variables("variables.cache") 
vars.Add("CXX", "use this c++ compiler", "/usr/bin/g++") 
# (other stuff added to vars) 

env = Environment(variables = vars) # <-- this line caused the error 

В неприятности фиксации этого у меня сложилось впечатление, что после обновления, Python был в состоянии дать мне лучшее сообщение об ошибке и сообщение было (пытаясь вспомнить это), что vars в некотором роде недействителен. Так что, может быть, проблема была в variables.cache, я не знаю. Может быть, я должен просто удалить этот файл (который я не сделал), чтобы избавиться от ошибки.

+0

Почему предназначены нецензурные символы? – Brady

+0

Извините за то, что вы не нашли лучших слов. Я имею в виду: они появились в терминале, не было никаких печатных ошибок, сделанных мной здесь, на SO, которые скрывают полезную строку кода. Похоже, что scons пытались разобрать двоичный файл или некоторые такие? –

ответ

1

Попробуйте выполнить SCons с предупреждениями, следующим образом:

# scons --warn=all 

Если это не помогает, вы можете попробовать более старой школы подход и поставить некоторые операторы печати в SConstruct, чтобы увидеть Что происходит и когда/где проблема возникает.

Вы также можете попробовать очистить весь проект и удалить/переименовать .sconsdb.lite в корневом проекте.

UPDATE:

Недавно у меня была проблема, потому что версия Python была изменена с 2.6 до 2.7 и обработка ошибок полностью изменилась. Итак, попробуйте поставить python try/except block вокруг всего (или, по крайней мере, стратегических частей) в свой SConstruct и распечатать исключенные (если есть) броски.

Если ни одна из этих работ не работает, попробуйте опубликовать здесь SConstruct.

Пример кода из моего SConstruct, демонстрирующий, как я нашел свою ошибку с помощью блока try/except Python. Исключение BuildError дало мне трассировку стека. Есть больше исключений, которые вы можете «поймать».

... 
try: 
    SConscript(
     os.path.join(moduleDir, 'SConscript'),      # sub-directory SConscript to load 
     variant_dir = '#%s' % os.path.join(env['variantDir'], dir), # path relative to this script where to put built files 
     exports = ['env'],           # which variables to export to sub-directory build 
     duplicate = 0)            # dont duplicate source files in variant_dir 
except SCons.Errors.BuildError as be: 
    print "*** BuildError exception processing module: %s, %s" % (moduleDir, be.__str__()) 
    raise 
except: 
    print "*** Unhandled exception processing module: %s" % moduleDir 
    raise 
+0

Спасибо за вашу поддержку! Проект довольно большой (несколько подкаталогов и, следовательно, SConcripts), и строка, которая «вызывает» ошибку, похожа на «env = Environment (var = vars)» или некоторые такие, у меня ее нет здесь в данный момент (узнано от 'print 'foo" отладки). Я обязательно попробую в среду или завтра! –

+0

Ну, ничего действительно не работает ... Я знаю строку, но поскольку я ничего не изменил вручную, это должно быть несогласованность с сгенерированным файлом или некоторыми такими. Я не могу очистить, я ничего не могу сделать с помощью команды 'scons', потому что она терпит неудачу с' SyntaxError'. –

+0

@ wal-o-mat, я знаю, что вы сказали, что проект огромен, но можете ли вы хотя бы опубликовать связанную часть SConstruct/SConscript? Вы можете рассмотреть возможность размещения его на ideone.com, если он большой. – Brady