当我使用chrome开发人员工具设置断点时,它不会将其精确地设置在我想要设置的行中。它将其更改为另一行。为什么会这样?如果我想在我想要的行中设置断点,我该怎么办?
这是视频:https://drive.google.com/file/d/0B7NuLgKMVzkgUHhaclM0YW1BSEU/view?usp=sharing
答案 0 :(得分:2)
调试器允许您在语句上添加断点。这可以通过单击语句开头的行号来实现。您无法在其中的表达式上添加断点。
以下代码是视频中Angular代码的模型:
$stateProvider.state("key1", {
url: "url1",
controller: "controller1",
templateUrl: "templateUrl1"
}).state("key2", {
url: "url2",
controller: "controller2",
templateUrl: "templateUrl2"
});
只有一个语句,从第1行开始到第9行结束。您可能正在调用两个链接在一起的函数,但它们只是一个语句。
您可以通过在debugger
函数中添加state
语句来解决此限制,以便每个链接函数调用都会中断。您可以在控制台/代码段中运行类似的内容:
var oldState = $stateProvider.state;
$stateProvider.state = function() {
debugger;
return oldState.apply(this, arguments);
}
这将保存对旧函数定义的引用,然后使用debugger
语句覆盖当前内容。如果你不关心真正的功能,你可以在那里结束它。但是,为了继续正常执行,我们可以使用apply
来调用origin函数,state
指定要传入的上下文和参数。您可以阅读详细解释here。
现在每个debugger
执行都会中断。如果你只想打破特定情况怎么办?好吧,您可以在key
语句中添加Conditional Breakpoint,如下所示:
现在代码只会在console.log
为' key2'时才会中断。
调试器语句可能会侵入您的执行流程,因此您可以使用r=[0.74616534, 4.1743176523]
语句或其他任何内容替换它。在这种情况下可以省略条件逻辑。