我正在调试一个javascript应用程序(使用Chrome开发工具),我想在单步执行代码时更改一些变量值。
这可能吗?
我尝试过这样的事情:
> modeline
1
> modeline=0
0 <<< seems to work but...
> modeline
1 <<< ups!!
但是我找不到任何说明可以或不可以做什么的文件......
答案 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; (虽然这不起作用)
go()
,返回的结果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开发工具中公认的错误:
答案 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)
答案 8 :(得分:1)
我不知道为什么chrome团队不允许这个愚蠢的功能......但是我唯一可以成功更改变量值的方法是直接在“Sources”选项卡下的chrome编辑器中修改脚本(这会改变刷新页面时脚本的行为),但刷新后更改将丢失,所以要小心。
答案 9 :(得分:0)
我遇到了同样的问题,转到了“关于谷歌浏览器” - &gt;帮助,它说我需要重新启动浏览器才能获得最新的更新。
我这样做了,突然间,我现在可以更改局部变量了。 只需在“范围变量”窗口中单击要编辑的变量,然后键入新值。
我确实注意到一些奇怪的事情,在我可以改变右侧窗口中的文本(Scope Variables)之前,我必须跳过一些不相关的var赋值。
答案 10 :(得分:0)