Chrome调试协议:HeapProfiler.getHeapSnapshot忽略回调

时间:2013-07-08 00:21:01

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

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

现在,我可以通过在下面的代码段中调用HeapProfiler.takeHeapSnapshot来拍摄快照。但是,当我尝试调用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); }
    });
});

1 个答案:

答案 0 :(得分:4)

这是DevTools中的一个错误。我在Chrome bug跟踪器中填写了an issue

幸运的是有一种解决方法。 您必须在获取快照之前启用调试器代理。

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

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

Profiler.start
Profiler.stop
Profiler.getCPUProfile