2009-08-24 63 views
23

我已經隨機得到以下錯誤在Emacs:追查MAX-specpdl尺寸誤差在Emacs

變量綁定深度超過MAX-specpdl尺寸

...和我一直在非常隨機的時刻得到它。經過研究,似乎某處的某個elisp正在遞歸得太深。有沒有什麼策略可以跟蹤?就實際造成這種情況而言,我完全不知所措。

我收到了一些錯誤,指出了與ropemacs無限遞歸的線(但這些通常是Python錯誤)。是否可以用ropemacs錯誤配置?

更新:有趣的是,我發現如果我爲「speedbar」做「C-h a」但不是「rope-」,我總是會得到這個錯誤。

回答

16

要跟蹤的問題了,你可以試試這個:

(setq max-specpdl-size 5) ; default is 1000, reduce the backtrace level 
(setq debug-on-error t) ; now you should get a backtrace 
C-h a ; in speedbar 

你應該在錯誤得到回溯,在這一點上,你可以追蹤到問題的程序。

我也試着加載emacs w/out你的配置文件(emacs -q),看你的.emacs中是否有東西影響着東西。 (我沒有使用C-h a得到無限循環)。如果它是你的.emacs,那麼我發現跟蹤它的最好方法是二進制搜索(把錯誤(error "frog")或其他一些在你的.emacs中,加載,測試,如果沒有問題,把錯誤在3/4處,否則在1/4處,重複...),或手動評估你的.emacs行(逐個區域),測試每個部分。這些設置應該有幫助。

+0

當然不是。希望SO在編輯時有一個「diff」工具,我想看看我在哪裏醞釀起來。 – 2009-08-24 17:42:52

+0

你有'debug-on-errot'。 如果您點擊編輯旁邊的鏈接(例如'5小時前'),可以看到差異。或者你的意思是不同的? – seth 2009-08-24 23:01:25

+0

我試過了,它沒有工作:我把值降低到5,並有錯誤調試T,但emacs沒有讓我進入調試器:它只是打印通常的錯誤信息。這發生在錯誤發生在自動縮進函數的地方,這可能會干擾錯誤調試嗎? – 2011-11-21 23:24:45

2

對我來說也沒用。我發現C-h + v實際上max-specpdl-size根本沒有變爲5setq。然後我試着用M-xset-variable交互設置它。這也沒有改變它的價值。最後我設法使用M-xcustomize-variable

順便說一句,在我的系統max-specpdl-size140,因此要小。我不得不將它增加到1000,而不是爲了獲得回溯並對其進行調試,而是使其工作。