如何使用ChromeDevTools更改对象特性?
我在支持调试器的nodejs上运行了以下代码:
function test() {
var obj = {
"my_prop": 1
}
return obj; // <- breakpoint here
}
while (true) {
test();
}
然后,我连接了ChromeDevTools客户端。在第5行设置断点(返回obj),并收到“Debugger.pautend”事件,在该事件中,我试图使用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"
});
在此之前,选定的属性为
真的
调用这个函数时出错,所以我决定使用Debugger.setVariableValue