Golang调试器Delve中如何设置结构体的值
Golang调试器Delve中如何设置结构体的值
我正在使用 Delve(Go 语言的调试器),并希望设置变量的值。设置基本数据类型(如布尔型)的值很简单,可以使用 set = 来完成。但我无法为结构体或结构体中的字段设置值。例如,我有一个 feasibleNodes 变量,其值为:
[]*k8s.io/api/core/v1.Node len: 1, cap: 1, [
*{
TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0xc0000dab00),
ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0xc0000dab20),
Spec: (*"k8s.io/api/core/v1.NodeSpec")(0xc0000dac08),
Status: (*"k8s.io/api/core/v1.NodeStatus")(0xc0000dac78),
},
]
我尝试过 set ((Node *) feasibleNodes)[index].fieldName = value 和 set (*(feasibleNodes[0])).TypeMeta=(*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0xc0000dab01),但它们都报错了。我该如何设置 TypeMeta、Status 或 len 的值呢?
更多关于Golang调试器Delve中如何设置结构体的值的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
在Delve中设置结构体字段的值需要使用正确的语法。对于你的feasibleNodes变量(这是一个指向Node结构体的指针切片),可以这样操作:
# 设置结构体字段的值
(dlv) set feasibleNodes[0].TypeMeta = (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0xc0000dab01)
# 或者直接设置字段的成员
(dlv) set feasibleNodes[0].ObjectMeta.Name = "new-node-name"
# 对于嵌套结构体
(dlv) set feasibleNodes[0].Status.Conditions[0].Status = "False"
# 如果要修改切片长度,需要重新赋值整个切片
(dlv) set feasibleNodes = append(feasibleNodes, nil)
如果遇到权限问题,可能需要先使用call命令:
(dlv) call feasibleNodes[0].SetName("new-name")
对于私有字段(小写开头的字段),Delve可能无法直接设置,需要通过反射或调用setter方法。

