在 Chrome 中单步执行 JavaScript 断点时如何查看 DOM?

Posted

技术标签:

【中文标题】在 Chrome 中单步执行 JavaScript 断点时如何查看 DOM?【英文标题】:How can I view the DOM while I am stepping through JavaScript breakpoints in Chrome? 【发布时间】:2017-08-12 05:50:46 【问题描述】:

在 Chrome DevTools 中,在 Sources 选项卡中调试 javascript 时(在 JS 代码中添加“debugger;”行,然后使用 F10/F11 单步执行代码),如何在单步执行代码时查看 DOM?

如果我的 JS 正在操作 DOM,我需要单步调试 JS 并观察我的 JS 如何修改 DOM 元素是很常见的。例如,我可能需要查看元素是如何被移动的,它们是否在应该被移除的时候被移除,它们是否在正确的时间获得了正确的类等等。

必须在 Sources 选项卡之间来回切换以执行单行,然后在 Elements 选项卡之间来回切换以查看我执行的每一行的 DOM 是如何修改的,这妨碍了我的调试,并且让我无法知道如何每一行都在影响 DOM。

如何在单步执行代码的同时查看元素?

【问题讨论】:

我还没有找到一个简单的方法来做到这一点。我只是在标签之间切换。 在控制台中粘贴要查看的节点的引用,即可查看简化树。 或者只是在监视面板中放置对 DOM 元素的引用。 Tab Elements,选择要监控的元素,RMB,Break on...属性修改。启用,进入 JS 并在完成后取消选中。 相关:Is it possible to open multiple instances or split view of chrome developer tools tabs? 【参考方案1】:

我想我可能会在你的 js 中输入 debugger,进入开发工具中的 Elements 视图,你可以右键单击要调试的元素,然后选择子菜单 break on,有几个选项你来调试你的 DOM。

另外,您可以通过 $("selector") 在控制台中检查要调试的元素

【讨论】:

【参考方案2】:

不确定我是否正确,但您可以从 Sources 选项卡中参考 DOM 检查,而无需切换选项卡。

在 Sources 选项卡中,您可以显示控制台(按 ESC 对我有用),然后通过 $0 .. $4 或通过选择器引用任何其他 DOM 的最新 DOM 更改。请参考Chrome's Command Line API Reference

【讨论】:

【参考方案3】:

MutationObserver

我认为 DevTools(从 Chrome 59 开始)无法满足您的需求(目前),但 MutationObserver 可能会有所帮助。

在 DevTools 控制台中执行以下代码(或另存为 sn-p):

var target = document.querySelector('body');
var observer = new MutationObserver(function(mutations) 
  mutations.forEach(function(mutation) 
    console.log(mutation);
  );    
);
var config =  
  childList: true, 
  attributes: true, 
  characterData: true, 
  subtree: true, 
  attributeOldValue: true, 
  characterDataOldValue: true
;
observer.observe(target, config);

这是尽可能冗长的。它将每个更改记录到body 或其任何后代。您可以调整代码以跟踪更少的更改(例如,通过观察更具体的节点,或关闭配置标志)。

有关所有配置标志的说明,请参阅 MutationObserverInit。还有一个 attributeFilter 标志(代码示例中未使用)可能对您有用。

DOM 断点

另一个选项是在节点上设置“子树修改”DOM Breakpoint。每当添加或删除节点或其任何子节点或更改其内容时,DevTools 就会暂停。但是,它不跟踪属性修改,因此对于这种情况可能还不够。

【讨论】:

哇,太酷了。我将不得不很快使用它。它似乎是一个强大的工具。

以上是关于在 Chrome 中单步执行 JavaScript 断点时如何查看 DOM?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 或 CLion 调试器中单步执行 ispc 源文件?

从路径获取 UIImage 仅在调试器中单步执行时有效

在单元测试中单步调试和调试代码

在SIGTRAP之后无法在gdb中单步调试程序

在 chrome 开发工具中调试导入的 Angular 库

如何在QEMU上的GDB中单步ARM组装?