在Google Chrome中调试时是否可以更改javascript变量值?

时间:2011-01-05 10:27:08

标签: javascript debugging google-chrome

我正在调试一个javascript应用程序(使用Chrome开发工具),我想在单步执行代码时更改一些变量值。

这可能吗?

我尝试过这样的事情:

> modeline
1
> modeline=0
0             <<< seems to work but... 
> modeline
1             <<< ups!!

但是我找不到任何说明可以或不可以做什么的文件......

11 个答案:

答案 0 :(得分:54)

现在可以使用chrome 35(今天截至2014年7月11日)。我不知道哪个版本首先允许它。

刚刚在我的机器上测试了@ gilly3示例,它确实有用。

  • Sources和标签Snippets中打开控制台,添加新代码段,将以下代码粘贴到其中:

    var g_n = 0; function go() { var n = 0; var o = { n: 0 }; return g_n + n + o.n; // breakpoint here }

  • 右键点击代码段名称,然后点击&#39;运行&#39; (虽然这不起作用)

  • 在return语句中添加断点。
  • 在下面的控制台中,输入go()
  • 并更改变量值,如下所示

function with local modification allowed.

,返回的结果g_n + n + o.n为30。

答案 1 :(得分:39)

为什么这个答案仍然有待提升?

Mikaël Mayer's answer,这不再是问题,我的答案已过时(go()现在在使用控制台后返回30。根据{{​​3}}中上面链接的bug report,这已于2013年7月修复。它让我觉得我仍然得到了投票 - 让我觉得upvoter不理解问题或我的答案。

出于历史原因,我会在此留下我的原始答案,但请选择<{3}}而不是


诀窍是您不能直接更改局部变量,但可以修改对象的属性。您还可以修改全局变量的值:

var g_n = 0;
function go()
{
    var n = 0;
    var o = { n: 0 };
    return g_n + n + o.n;  // breakpoint here
}

控制台:

> g_n = 10
  10
> g_n
  10
> n = 10
  10
> n
  0
> o.n = 10
  10
> o.n
  10

在设置断点并在控制台中运行这些调用后检查go()的结果,你会发现结果是20,而不是0(但遗憾的是,不是30)。

答案 2 :(得分:7)

这是Chrome开发工具中公认的错误:

http://code.google.com/p/chromium/issues/detail?id=124206

答案 3 :(得分:4)

Firebug似乎允许你这样做。

答案 4 :(得分:3)

看起来不是。

设置断点,当它停止切换到控制台时,尝试设置变量。当您为其指定不同的值时,它不会出错,但如果您在赋值后读取它,则它不会被修改。 : - /

答案 5 :(得分:2)

实际上有一种解决方法。复制整个方法,修改它的名称,例如originalName()到originalName2()但修改内部变量以获取您想要的任何值,或将其作为参数传递。

然后,如果直接从控制台调用此方法,它将具有相同的功能,但您将能够修改变量值。

如果自动调用该方法,则输入控制台

originalName = null;
function originalName(original params..)
{
    alert("modified internals");
    add whatever original code you want
}

答案 6 :(得分:2)

我可以通过控制台中的分配修改脚本变量值。似乎最简单。

答案 7 :(得分:2)

是的!最后!我刚刚在Mac上使用Chrome,版本66.0.3359.170(官方版本)(64位)进行了尝试。

您可以像第一张图片一样更改示波器中的值,也可以像第二张图片一样使用控制台更改。

Chrome debugger change values

enter image description here

答案 8 :(得分:1)

我不知道为什么chrome团队不允许这个愚蠢的功能......但是我唯一可以成功更改变量值的方法是直接在“Sources”选项卡下的chrome编辑器中修改脚本(这会改变刷新页面时脚本的行为),但刷新后更改将丢失,所以要小心。

答案 9 :(得分:0)

我遇到了同样的问题,转到了“关于谷歌浏览器” - &gt;帮助,它说我需要重新启动浏览器才能获得最新的更新。

我这样做了,突然间,我现在可以更改局部变量了。 只需在“范围变量”窗口中单击要编辑的变量,然后键入新值。

我确实注意到一些奇怪的事情,在我可以改变右侧窗口中的文本(Scope Variables)之前,我必须跳过一些不相关的var赋值。

答案 10 :(得分:0)

要在每次代码块运行时修改值而不必中断执行流程

调试器中的“ Logpoints”功能旨在让您将任意值记录到控制台而不会中断。它在执行流程中评估代码,这意味着您实际上可以使用它来即时更改值而无需停止。

右键单击行号,然后选择“ Logpoint”,然后输入分配表达式。看起来像这样:

enter image description here

我发现它非常有用,它可以将值设置为其他情况下不易复制的状态,而不必使用调试行来重建我的项目。完成后,请记住删除断点!