提问人:Daniel A. White 提问时间:6/5/2015 更新时间:11/30/2016 访问量:5355
在 Safari Web 检查器中调试 Web Worker
Debugging Web Workers in Safari Web Inspector
问:
Chrome 的开发工具非常适合调试 Web Worker,因为我可以“浏览”到 JavaScript 环境并设置断点。甚至控制台也能按预期工作。
在Safari上,这是一个完全不同的故事。 From the Web Worker 甚至不会在控制台中打印。我看到加载了工作脚本,并在其上放置了一个断点,但它没有中断。我什至没有看到加载了 .console.log
importScripts
如何使用 Safari 的 Web 检查器对问题进行故障排除?
并不是说我认为这很重要,但我正在使用 Safari 8。
答:
-3赞
singmotor
10/7/2016
#1
您可以使用 postMessage 代替 console.log。postMessage 应该允许您向 Safari 控制台发送调试消息。
这是一个关于如何做到这一点的很好的例子,我在下面粘贴了主要思想:
//
// In the Main thread
//
var worker = new Worker('/path/of/webworker/code.js')
worker.onmessage = function (e) {
var result = JSON.parse(e.data);
if(result.type == 'debug') {
console.log(result.msg);
} else if(result.type == 'response') {
// ... use result.answer ...
}
}
//
// In the WebWorker
//
function debug(msg) {
postMessage(JSON.stringify({type:'debug',msg:msg}));
}
onmessage = function (e) {
var inputData = e.data;
// work on input data
debug('Working OK');
// work some more
// ...
postMessage(JSON.stringify({type:'response', answer:42}));
};
如果你不想玩postMessage,David Flanagan在这里为它做了一个包装器,它应该允许你至少使用console.log进行调试
评论
2赞
Daniel A. White
10/7/2016
我确实知道,但是我真的很想设置断点并拥有完整的调试体验。postMessage
-1赞
Chrome App
11/14/2016
#2
在源代码中插入代码debugger;
用法:将其插入到要添加断点的任何位置,当开发人员控制台自动打开时,执行将在该行暂停
var a = 50;
a = a + 5;
debugger; //--> execution is paused here
a = a - 5;
有关详细信息,请参阅有关 mozilla.org 的调试器文档
评论
1赞
Samuel Liew
11/14/2016
将来请为您的链接提供描述性名称或标题。
0赞
Chrome App
11/30/2016
@Daniel A. White ,嗨,这对你有用吗??如果是,你能为这篇文章投赞成票吗??
0赞
user3761308
10/18/2017
在 Safari 中不执行任何操作 (<= 9.1)
0赞
Serge
11/18/2020
你并不总是控制所有的源代码......在某些情况下,我不能使用调试器语句。我只是不明白为什么苹果不能做到这一点......在 Chrome 中工作正常......但是我被困在一个IOS包装器项目中......
评论