2012-05-21 25 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

抱歉找不到更好的單詞。我的意思是:他們在終端上以這種方式出現,在我們這裏沒有打字錯誤,它隱藏了有用的代碼行。看起來像scons試圖解析一個二進制文件或一些這樣的? –

回答

1

嘗試用警告執行scons的,如下:

# scons --warn=all 

如果這並不幫助下,你可以嘗試一個更老派的做法,並把在SConstruct一些打印語句,看看發生了什麼和何時/何發生問題。

您也可以嘗試清洗整個項目和刪除/重命名根項目.sconsdb.lite。

UPDATE:

因爲Python的版本從2.6改爲2.7,並錯誤處理完全改變了我最近有一個問題。因此,請嘗試在SConstruct中的所有內容(或至少是戰略部分)上放置python try/except塊,並打印拋出的異常(如果有的話)。

如果沒有這些工作,嘗試在這裏張貼的SConstruct。從我SConstruct

代碼示例演示如何我發現我的錯誤與一個Python的try/except塊。 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