答案 0 :(得分:2)
是的,这是一个错误,请将其与lldb.llvm.org bugzilla一起提交。
注意,po
只是简写:运行基本的“expr”命令将参数计算为表达式,然后在结果上调用description方法。
表达式命令的工作方式是,如果表达式足以解释,我们就这样做,否则我们JIT表达式并将其插入到debugee中并运行它。错误在解释器中,显然它不能用签名整数做mod
。无符号整数类型正常工作,JIT结果也正确。例如,在Kurt的例子中:
(lldb) expr n % m
(int) $5 = 0
那不对!但是:
(lldb) expr (void) printf ("%d\n", n % m)
2
(lldb)
因为表达式涉及函数调用,所以我们无法解释它并且不得不JIT它,这使计算正确。这也是一个非常粗略的解决方法,但也请提交一个错误。