2017-04-20 44 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目前没有提供这个,并且答案旨在表明现在*可能*而不是将来。 –

相关问题