提问人:Norem 提问时间:8/31/2023 最后编辑:Norem 更新时间:9/1/2023 访问量:29
ChromeDevTools SetVariableValue:如何更改对象属性?阵列单元?
ChromeDevTools SetVariableValue: how change object property? array cell?
问:
如何使用 ChromeDevTools 更改对象属性?
我在支持调试器的nodejs上运行了以下代码:
function test() {
var obj = {
"my_prop": 1
}
return obj; // <- breakpoint here
}
while (true) {
test();
}
然后,我连接了ChromeDevTools客户端。在第 5 行(返回 obj)上设置断点并收到“Debugger.paused”事件,其中我尝试使用 Debugger.setVariableValue 更改“obj”对象的“my_prop”属性,如以下代码所示:
var frame = e.CallFrames[0];
var eval = await session.SendAsync(new Debugger.EvaluateOnCallFrameCommand
{
CallFrameId = frame.CallFrameId,
ReturnByValue = false,
Timeout = 10000,
GeneratePreview = true,
IncludeCommandLineAPI = true,
Silent = true,
ThrowOnSideEffect = true,
Expression = "obj"
});
var objectId = eval.Result.Result.ObjectId;
var set = await session.SendAsync(new Debugger.SetVariableValueCommand
{
CallFrameId = frame.CallFrameId,
ScopeNumber = 0,
VariableName = "my_prop",
NewValue = new Runtime.CallArgument
{
ObjectId = objectId,
Value = 900,
UnserializableValue = "900"
},
});
但是我收到错误“-32603:内部错误”
使用此代码成功更改局部变量
谁能告诉我我的错误在哪里?
解决
我错过了一条重要的评论:“不支持基于对象的作用域”
我设法通过 Debugger.evaluateOnCallFrame 进行了必要的分配:
var eval = await session.SendAsync(new EvaluateOnCallFrameCommand
{
CallFrameId = frame.CallFrameId,
ReturnByValue = true,
Timeout = 10000,
GeneratePreview = true,
IncludeCommandLineAPI = true,
Silent = true,
ThrowOnSideEffect = false, <- must be false
Expression = "obj.my_prop=100"
});
在此之前,所选属性为 true,并且在调用此函数时出现错误,因此我决定应该使用 Debugger.setVariableValue
答: 暂无答案
评论