Graph 我如何找到使用rrdtool';s";错误:RPN最终堆栈大小!=“1”吗;?

Graph 我如何找到使用rrdtool';s";错误:RPN最终堆栈大小!=“1”吗;?,graph,stack,rrdtool,rpn,Graph,Stack,Rrdtool,Rpn,我为rrdtool-graph提供了一些复杂的表达式,它是由脚本构建的。 我也认为这曾经奏效,但从那时起我升级了rrdtool。不幸的是,我得到的唯一输出是ERROR:RPN final stack size!=1 是否有更好的诊断方法(例如跟踪或转储rrdtool的堆栈)?此错误消息表示RPN中存在错误;通常,这将是CDEF 当RPN被完全处理时,堆栈中应该只有一个项目;如果你得到更多或更少,那么你会看到这个错误 最好的验证方法是,对于一个样本数据集,手工在纸上简单地运行RPN过程;如果你有一

我为
rrdtool-graph
提供了一些复杂的表达式,它是由脚本构建的。 我也认为这曾经奏效,但从那时起我升级了rrdtool。不幸的是,我得到的唯一输出是
ERROR:RPN final stack size!=1


是否有更好的诊断方法(例如跟踪或转储rrdtool的堆栈)?

此错误消息表示RPN中存在错误;通常,这将是CDEF

当RPN被完全处理时,堆栈中应该只有一个项目;如果你得到更多或更少,那么你会看到这个错误


最好的验证方法是,对于一个样本数据集,手工在纸上简单地运行RPN过程;如果你有一个错误,那么它将变得清晰。RRDTool处理器没有调试选项可以在RPN上提供一步一步的调试,因为这将对集合中的每个数据点运行,生成一个巨大的日志。

最终我找到了问题的原因(灵感来自),但仍然不知道如何更好地调试它:似乎我的
CDEF
中的一个不正确。我写的不是
CDEF:S=P0,P1,P22,P23,“+”,“+”,“+”
,而是
CDEF:S=P0,P1,P22,P23,“+”
。恐怕没有什么比处理RPN表达式后堆栈必须包含单个值更重要的了。。。至于为什么您没有处理堆栈的所有元素,这是程序无法向您提供建议的…@Tobi Oetiker:如果rrdtool打印堆栈上的项目(可能还有项目数),您至少会得到一些提示,可以在哪里查找错误。一些诊断选项将非常有用。该工具不必解释我为什么出错,只需解释我出错的原因。是的,调试输出肯定是虚构的。。。如果你愿意帮忙的话,无论如何。。。签出主机并发送一个PR。。。如果您对如何实施有疑问,请提问!是的,公式将应用于每个数据点,但如果公式中存在错误,rrdtool将退出,因此调试输出将很短。猜测您的C编译器只是说了“语法错误”,建议您用纸上的C语法检查您的程序;-)我同意错误分析和RPN的详细调试输出会有所帮助;然而,RRDTool目前并没有提供这一点,答案旨在指出现在而不是将来可能发生的事情。