【问题标题】:Chrome Debugging Protocol: HeapProfiler.getHeapSnapshot Ignores CallbackChrome 调试协议:HeapProfiler.getHeapSnapshot 忽略回调
【发布时间】:2013-07-05 06:09:41
【问题描述】:

我正在开发一个测试套件(作为 Chrome 扩展程序实现),它使用 Chrome/Chromium 的远程调试协议以编程方式获取和分析堆快照。因为Profiler.* 似乎不是公共协议的一部分,所以我使用this page 作为参考。

现在,我可以通过调用HeapProfiler.takeHeapSnapshot 来获取堆快照,如下面的 sn-p 所示。但是,当我尝试调用 HeapProfiler.getHeapSnapshot 时,我的回调完全被忽略了。

var debuggerId = {tabId: sender.tab.id};
chrome.debugger.attach(debuggerId, "1.0", function() {
    var listener = function(source, method, params) {
        if(source.tabId === debuggerId.tabId) {
            if(method === "HeapProfiler.addProfileHeader") {
                var uid = params.header.uid;
                chrome.debugger.sendCommand(debuggerId, "HeapProfiler.getHeapSnapshot", { uid: uid }, function() {
                    console.log("I never get called!");
                });
                chrome.debugger.onEvent.removeListener(listener);
            }
        }
    };
    chrome.debugger.onEvent.addListener(listener);
    chrome.debugger.sendCommand(debuggerId, "HeapProfiler.takeHeapSnapshot", { reportProgress: false }, function() {
        if(chrome.runtime.lastError) { console.error(chrome.runtime.lastError); }
    });
});

【问题讨论】:

标签: javascript google-chrome-extension google-chrome-devtools heap-memory


【解决方案1】:

这是 DevTools 中的一个错误。我已经在 chrome bug tracker 中填写了an issue

幸运的是,有一个解决方法。 您必须在获取快照之前启用 Debugger 代理。

chrome.debugger.sendCommand(debuggeeId,"Debugger.enable", { }, function() { });

其他三个命令也受到此错误的影响。

Profiler.start
Profiler.stop
Profiler.getCPUProfile

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2014-06-24
    • 2017-09-24
    相关资源
    最近更新 更多