Go 如何在delve mozilla rr(录制重播)重播会话期间显示decimal.decimal的浮点值

Go 如何在delve mozilla rr(录制重播)重播会话期间显示decimal.decimal的浮点值,go,delve,Go,Delve,如何在delve会话中轻松查看十进制的浮点值。 特别是在mozilla rr录制的dlv replay会话中 (dlv) args underlyingPx = github.com/shopspring/decimal.Decimal {value: ("*math/big.Int")(0xc00101cca0), exp: 3} (dlv) p underlyingPx github.com/shopspring/decimal.Decimal { value: *math/big

如何在delve会话中轻松查看十进制的浮点值。 特别是在mozilla rr录制的
dlv replay
会话中

(dlv) args
underlyingPx = github.com/shopspring/decimal.Decimal {value: ("*math/big.Int")(0xc00101cca0), exp: 3}

(dlv) p underlyingPx
github.com/shopspring/decimal.Decimal {
    value: *math/big.Int {
        neg: false,
        abs: math/big.nat len: 1, cap: 1, [8],},
    exp: 3,}
谢谢

根据,有一种方法可以接收此信息:

// Float64 returns the nearest float64 value for d and a bool indicating
// whether f represents d exactly.
// For more details, see the documentation for big.Rat.Float64
func (d Decimal) Float64() (f float64, exact bool) {
    return d.Rat().Float64()
}
在提供的示例中,只需调用此方法即可:

(dlv) p underlyingPx.Float64()

我分叉了delve工具并改进了
p
命令:

演示:

(dlv)p im
github.com/shopspring/decimal.decimal{
值:*math/big.Int{
负数:错,,
abs:math/big.nat len:2,cap:7,[467022713665329561610618058790999],},
exp:-33,}

value:0.19586861307716508不幸的是,在
dlv replay
失败输出的mozilla rr replay会话期间,我们无法调用方法:(dlv)p body.Amount.Float64()命令失败:不使用“call”@whunmr不允许函数调用,您可以尝试
(dlv)调用underyingpx.Float64()
?如果可行,我将编辑答案。不适用于
调用
,输出为“命令失败:不支持的数据包$G000000000060…在寄存器写入期间”。我认为可行的方法可能是使用python脚本解析
p
命令输出:github.com/shopspring/decimal.decimal{value:*math/big.Int{neg:false,abs:math/big.nat-len:1,cap:1,[10],},exp:0,}
(dlv) p im
github.com/shopspring/decimal.Decimal {
    value: *math/big.Int {
        neg: false,
        abs: math/big.nat len: 2, cap: 7, [4670227136653295616,10618058790999],},
    exp: -33,}

value: 0.19586861307716508    <---- this is the added output