2017-04-20 43 views
0

我有一個由腳本構建的rrdtool graph的複雜表達式。 我也認爲這曾經工作,但自那時起我升級rrdtool。不幸的是,我得到的唯一結果是ERROR: RPN final stack size != 1如何找到rrdtool的「錯誤:RPN最終堆棧大小!= 1」的原因?

有沒有辦法獲得一些更好的診斷(例如跟蹤或轉儲rrdtool的堆棧)?

+0

最終我找到了問題的原因(受http://forums.cacti.net/post-78489.html啓發),但仍然沒有如何以更好的方式進行調試:它似乎是我的一個' CDEF的不正確。我寫了'CDEF:S = P0,P1,P22,P23,'+'',而不是CDEF:S = P0,P1,P22,P23,'+','+','+'。 –

+0

恐怕沒有太多可以說,堆棧必須包含單個值後,您的RPN表達式已被處理......至於爲什麼你沒有處理堆棧的所有元素,這是程序可以不建議你... –

+0

@Tobi Oetiker:如果rrdtool會打印堆棧上的項目(加上可能的項目數量),至少會得到一些提示,以尋找錯誤。某些診斷選項將非常有用。該工具不必解釋爲什麼我犯了一個錯誤,但只是我犯了哪個錯誤。 –

回答

0

此錯誤消息表明您的RPN中有錯誤;通常情況下,這將是CDEF。

當RPN被完全處理時,堆棧中應該只有一個項目;如果你得到更多或更少,那麼你會看到這個錯誤。

驗證的最好方法是簡單地通過RPN過程在紙上手動運行一個樣本數據集;如果你有錯誤,那麼它會變得清晰。 RRDTool處理器沒有調試選項,它將在RPN上提供逐步調試,因爲這將在每個數據點中運行,從而生成一個巨大的日誌。

+0

是的,公式會應用於每個數據點,但是如果公式rrdtool中存在錯誤,那麼調試輸出會很短。猜測你的C編譯器只是說「語法錯誤」,並且建議用紙上的C語法來檢查你的程序;-) –

+0

我同意分析錯誤和詳細的RPN調試輸出將會有所幫助;然而RRDTool目前沒有提供這個,並且答案旨在表明現在*可能*而不是將來。 –

相關問題