Chrome中同步控制台日志记录

8

有没有可能将控制台日志记录同步化?我经常遇到代码执行速度比转储结构快的情况。这会导致输出已更改的对象。

当然,我可以使用调试器遍历代码、进行单元测试等,但仅仅使用console.log来获取正在发生的事情的一般想法通常很方便。

3个回答

11

在将对象传递给console.log之前,您可以创建该对象的副本。请看此处的函数来创建您的对象的深层副本。

编辑:

现在在Chrome中实现了该功能,请参见此处


好的,谢谢,听起来可行。虽然我更喜欢只是以某种方式覆盖原始控制台转储,使其成为阻塞而不是异步。 - Mikulas Dite
问题在于对象是通过引用传递给控制台的,如果您稍后更改对象,则控制台中的输出也会更改。 - Fox32
哦,我明白了...我以为它会自己拍摄快照。在这种情况下,克隆对象似乎是唯一的解决方案。再次感谢。 - Mikulas Dite
1
我在控制台上玩了一下,它似乎是通过引用传递的,如果你“打开”对象,值会被评估并保持不变。 - Fox32
看起来你是对的。控制台的行为真的很让人不舒服,我无法想象在任何情况下这会有帮助或是被期望的。它似乎太傻了。好吧,谢谢,我想我只能使用自定义包装和克隆了。 - Mikulas Dite

9

我刚刚被这种行为抓住了,花了几个小时才意识到控制台出问题了,而不是我的代码。真可恶。

到目前为止,我只能通过以下方式获得预期的结果:

console.log(JSON.stringify(obj))

很好的副作用是,它可以扩展像{0: "a", 3: "b"}这样的对象


1
哦,那真的很好地解决了所有问题。谢谢你 :) - Mikulas Dite

2

在console.log语句处设置一个断点(请见下图),使用控制器一步一步执行到下一个语句。


谢谢,但我知道我可以使用调试器逐步执行代码。我甚至在原始问题中已经说明了这一点。 - Mikulas Dite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接