- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下愚蠢的例子:
<!doctype html>
<meta charset="utf-8">
<title>dumb snippet</title>
<script>
var i = 0;
while (i < 100) {
console.log(i);
debugger;
i += 1;
}
</script>
如果我使用 Google Chrome 的 DevTools 运行这段代码,调试器会尽职尽责地在 debugger
语句处停止执行,但我还没有找到任何方法来立即中止(并重新启动)脚本。 AFAICT,按下 Ctrl-R
甚至 Shift-Ctrl-R
,而不是重新加载页面,只会导致执行继续。
我发现的唯一办法很明显,但带来不必要的不便:完全关闭选项卡/窗口,然后打开一个新的。
Google Chrome DevTools 是否提供了一些方法来立即中止在 debugger
语句处停止的脚本?
(如果答案恰好是“否”,请不要发布解决方法。我可以想到很多,例如按住 F-8 直到循环退出,当然这不会起作用,如果循环结果是一个无限循环。无论如何,这里我只对是否有一种“官方”方式来中止并重新启动这样的脚本感兴趣。)
最佳答案
你可以做到,但你必须先准备好你的代码。
在 Google Chrome Dev Tools 中停止脚本执行的说明:
(1) 创建一个全局变量:
var devquit=0;
$(document).ready({
//the rest of your code
(2) 任何你可能希望退出的地方,插入这个变量的测试:
//Lotsa code
if (devquit > 0) return false;
(3) 在上述测试行或之前暂停执行脚本
(4) 切换到控制台
(5) 类型:
> devquit
0
> devquit=1 <=== only this line is necessary
> devquit
1
(6) 继续执行脚本。当脚本执行上述步骤 (2) 中的测试时,脚本将返回 false
注意事项:
(A) 这个技巧适用于全局变量和对象,但不适用于局部变量。
(B) 因此,您仍然可以对已运行的代码使用此技巧如果您有一个全局变量或一个对象,如果它有一个给定的值。
(C) 在紧要关头,您还可以从 DOM(在元素选项卡上)删除一个会导致 javascript 错误的元素。例如,假设您有代码 var cartype = $('#cartype').val();
如果您在该行代码之前删除 ID=cartype
的元素,然后 js 将在那条线上中断。 但是,当您尝试重新运行代码时,该元素仍然会丢失。上述技巧允许您运行和重新运行代码ad无限。
更多注意事项:
(a) 在代码中插入断点:只需在一行中单独键入 debugger;
。如果 DevTools 打开,脚本将在此时跳转到调试器。如果 DevTools 未打开,代码将忽略语句。
(b) 想要避免在调试代码时跳入 jQuery 库?黑箱它。参见 blackbox instructions for Chrome - 或 - for Firefox
感谢(请访问并点赞):
Javascript Debugging line by line using Google Chrome
Is it possible to change javascript variable values while debugging in Google Chrome?
关于javascript - Chrome : How to abort a script that is stopped at `debugger` statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625087/
我是一名优秀的程序员,十分优秀!