2

考虑以下愚蠢的例子:

<!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 直到循环退出,尽管这当然行不通,如果循环原来是一个无限循环。无论如何,这里我只关心是否有“官方”的方式来中止和重新启动这样的脚本。)

4

1 回答 1

1

你可以这样做,但你必须先准备好你的代码。

在 Google Chrome 开发工具中停止脚本执行的说明:

(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) 继续执行脚本。脚本将return false在执行上述步骤 (2) 中的测试时


笔记:

(A) 这个技巧适用于全局变量和对象,但不适用于局部变量。

(B) 所以,如果你有一个全局变量或一个对象,如果它有一个给定的值,你仍然可以在已经运行的代码中使用这个技巧。

(C) 在紧要关头,您还可以从 DOM 中删除一个元素(在元素选项卡上),这将导致 javascript 错误。例如,假设您有代码var cartype = $('#cartype').val();如果您cartype在该行代码之前删除了 ID= 的元素,那么 js 将在该行中断。但是,当您尝试重新运行代码时,该元素仍然会丢失。上面描述的技巧允许您无限地运行和重新运行代码。


更多注释:

(a) 在代码中插入断点:只需单独键入debugger;一行。如果 DevTools 已打开,则脚本将在此时跳转到调试器。如果 DevTools 没有打开,代码将忽略语句。

(b) 想在调试代码时避免跳入jQuery库?黑箱它。请参阅Chrome 的黑盒说明- 或 -用于 Firefox


感谢(请访问并点赞):

使用 Google Chrome 逐行调试 Javascript

在 Google Chrome 中调试时是否可以更改 javascript 变量值?

于 2015-04-01T14:32:02.423 回答