Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome调试协议:HeapProfiler.getHeapSnapshot忽略回调_Javascript_Google Chrome Extension_Heap_Google Chrome Devtools - Fatal编程技术网

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

Javascript Chrome调试协议:HeapProfiler.getHeapSnapshot忽略回调,javascript,google-chrome-extension,heap,google-chrome-devtools,Javascript,Google Chrome Extension,Heap,Google Chrome Devtools,我正在开发一个测试套件(作为一个Chrome扩展实现),该套件使用Chrome/Chrome的远程调试协议以编程方式获取和分析堆快照。因为Profiler.*似乎不是公共协议的一部分,所以我使用它作为参考 现在,我可以通过调用HeapProfiler.takeHeapSnapshot拍摄堆快照,就像下面的代码片段一样。但是,当我尝试调用HeapProfiler.getHeapSnapshot时,我的回调被完全忽略 var debuggerId = {tabId: sender.tab.id};

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

现在,我可以通过调用
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); }
    });
});

这是DevTools中的一个bug。我已经填写了chrome bug tracker

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

chrome.debugger.sendCommand(debuggeeId,"Debugger.enable", { }, function() { });
其他三个命令也受到此错误的影响

Profiler.start
Profiler.stop
Profiler.getCPUProfile

太棒了…正是我想要的。很遗憾,调试协议的其余部分没有对此进行记录。示例代码如下: