为什么调试器不会在断点处停止?

42

我有一个问题,就是使用Chrome调试JS时,某个特定函数不会每次执行都停下来。我尝试了使用debugger;语句和在希望代码停止的行号左边的空白处设置断点(即在gutter上标记蓝色标签)。

有什么想法可以解决这个问题吗?


4
通常意味着代码未被调用。 - Pascal Le Merrer
如果没有可重现的测试用例,很难确定问题。您能否创建一个并在您的问题中发布? - MasterAM
相关帖子请点击此处 - RBT
我在Firefox上尝试了我的React应用程序,它可以正常运行;但是在Chrome v102.0.5005.115(官方版本)上尝试时失败了。之前在Chrome上是可以工作的。 - Ricardo
14个回答

35

如果没有明确的复现计划,很难确定为什么断点无法命中。

但是,最肯定的一种停在某一行的方法是编写:

debugger;

到你想要停止的位置。如果路沿没有任何蓝色标记,调试器将会停止。

注意: 在完成后,请确保清除所有的 debugger;

更多信息请参考此处


我的Chrome仍然忽略它并且什么也不做,即使我在调用“debugger”之前使用console.log记录了文本,并且该文本已被记录。 - Black
如果您有修改源代码的权限,这可能会有所帮助,但总的来说,这并不是解决 OP 问题的方法。 - Madbreaks

19
我发现有效的方法是按照上面的建议设置断点,然后在扩展的控制台中运行:
location.reload(true); 这将重新打开扩展程序,触发我的断点并允许我进行调试!
似乎问题与调试器加载在扩展程序之后有关,因此无法捕获断点。希望这有所帮助!

3
在运行 VS Code 时对我很有用。谢谢! - Tobias Moe Thorstensen

5

在我的观察中,这似乎是 Chrome 浏览器的一个 bug - 任何东西都无法触发断点,即使是 debugger 命令。我不得不关闭并重新打开Chrome,然后我的断点才起作用。


4
我刚刚解决了一个断点无法触发的问题。在HTML中的JavaScript断点没有被触发,尽管我可以设置和命中包含的JavaScript文件中的断点。
我发现问题出在源文件被重复包含了两次。基本的HTML页面(不是动态包含的)有sourceURL标签。这导致相同的JavaScript存在于源窗格中两次,从而产生了问题。
我从基本的HTML页面中删除了"sourceURL"标签,断点就恢复正常工作了。

这就是它。当你在打开文件后将包含js的工作文件夹添加到Chrome工作区时,就会发生这种情况。 - Ognyan Dimitrov
对我来说也是一样的。从工作区中移除文件/文件夹解决了这个问题。 - Vadim

2

此外,断点可能被禁用。您可以在调试器中切换此选项,或按Ctrl + F8键。


1

您是否意外地将文件夹添加到工作区中?
如果是,您的devTool断点将无法在此文件上停止工作。
enter image description here

当我从工作区中删除文件夹后,断点功能恢复正常!
enter image description here


1

1
看起来现在被称为“忽略列表”(Ignore List)。 - Ricardo

1
这可能听起来有些愚蠢...但对我来说有效...只需关闭并重新打开浏览器即可恢复JS调试功能。

1
我发现带有async属性的标签引用的代码在开发者模式下不会停在断点处。

0

使用像AngularJS这样的客户端解决方案时,模块和控制器是独立于文件名选择的。很可能您已经在与您正在调试的实际文件相同的文件夹中创建了文件的备份/副本。这可能是被调用的js文件而不是您打算使用的文件。您可以删除该文件,然后它应该正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接