如何在Google Chrome浏览器的嵌入式Javascript中设置断点?


210

当我在Google Chrome浏览器中打开开发人员工具时,我看到了各种功能,例如“个人资料”,“时间轴”和“审核”,但是缺少诸如在js文件以及html和javascript代码中设置断点的基本功能!我尝试使用JavaScript控制台,该控制台本身是有问题的-例如,一旦遇到JS错误,除非刷新整个页面,否则我无法摆脱它。有人可以帮忙吗?


我放弃了Chrome。尝试使用Firefox,并在几秒钟内命中了我的断点。Chrome可能有可能,但如何实现当然并不明显!
奥利弗·P

Answers:


126

使用“源”选项卡,您可以在其中的JavaScript中设置断点。在其下方的目录树中(带有向上和向下箭头),可以选择要调试的文件。您可以通过按同一选项卡右侧的“恢复”来避免出现错误。


31
由于某种原因,我看到了包含的js文件的列表,但是我无法选择执行页面本身,它没有显示在列表中。有任何想法吗?
ulu 2011年

67
@ulu,我遇到了同样的问题。确保在<script>元素上设置了type =“ text / javascript”属性。
contactmatt

9
除了在HTML5中,此属性不再是必需的。我不是为了调试而更改源代码!
sashok_bg,2016年

10
即使添加type =“ text / javascript”,我也看不到
Nitin Kumar Mishra

2
如果这没有工作,你有一个像内联的JavaScript代码:<script> your code </script>像添加名称:<script> your code //# sourceURL=somename.js </script> 这是在下面的答案解释的更好
KM。

209

您是在谈论<script>标签中的代码还是HTML标签属性中的代码?

<a href="#" onclick="alert('this is inline JS');return false;">Click</a>

无论哪种方式,这样debugger关键字都可以使用:

<a href="#" onclick="debugger; alert('this is inline JS');return false;">Click</a>

注意debugger如果未打开开发工具,Chrome将不会在暂停。


您还可以在JS文件和<script>标签中设置属性断点:

  1. 点击来源标签
  2. 单击显示导航器图标,然后选择一个文件
  3. 双击左边距中的行号。相应的行将添加到“ 断点”面板(4)。

在此处输入图片说明


4
没有“脚本”选项卡。我看到了此图中的所有其他标签,但没有“脚本”标签!
ace

5
我的意思是能够在html的scrip标签内设置断点。我也尝试使用调试器。关键字,但不起作用。Chrome不会对此断点,但可以在Firefox中使用。我正在寻找不基于debugger关键字的断点解决方案,这不方便在代码中放置很多地方然后删除。
ace

2
在“脚本”选项卡下的下拉列表中,我仅看到列出的JS文件,但没有看到包含要调试的<script>标记的HTML文件。FF上的Firebug具有类似的下拉菜单,但还会列出包含<script>标记的HTML文件。这是一个错误还是有其他方法可以在内联JS代码中设置断点?
Wolfram Arnold'3

8
该选项卡被调用,Sources而不是Scripts现在。
CoderDennis 2012年

1
当我尝试调试html嵌入式js时,在开发区域中出现空白页。在查看空白源文件时,我必须刷新才能使其填充。
HappyCoder86

72

您还可以为脚本命名:

<script> ... (your code here) //# sourceURL=somename.js </script>

当然,用一些名称替换“ somename”;),然后您将在chrome调试器中的“源>顶部>(无域)> somename.js”处看到它作为普通脚本,就可以像其他脚本一样对其进行调试


3
最简单和完美的方式。但请注意其他事项,切记在将其投入生产之前将其删除。
Zameer Fouzan

2
哦,天哪,你不知道这对我有多大帮助。哦,天哪,这太棒了。我多年来一直在寻找类似的东西。
格雷格罗斯

我使用了这个(好的)想法,但是在“源”选项卡中看不到新文件,只能看到html文件。然后,我执行了代码,最后在控制台中,从脚本写入的任何消息的右侧,您都可以看到代码的链接。最好的部分是该链接显示您为脚本提供的文件名(即//#sourceURL = somename.js)。
曼努埃尔·里维拉

1
如果可以的话,我会给你1000票;)非常有用的把戏
Giulio Quaresima

43

在脚本选项卡上打开开发人员工具的同时刷新包含脚本的页面。这将在文件列表中添加一个(程序)条目,该条目显示包含脚本的页面的html。从这里可以添加断点。


这对我不起作用。相反,我单击了右下角的脚本错误图标以在“脚本”选项卡中打开程序文件。
sanbikinoraion

1
谢谢!使用Chrome 69,即使我不在“源”选项卡中,它也可以工作。在页面加载时打开开发人员工具似乎是关键。
山姆

如果这是我的问题,这将是公认的答案。谢谢。
丰满的国度

在Chrome 83中工作。在我的环境中,文件名基于您应用的URL。例如,如果URL为example.com/xxx/yyy,则文件名将为“ yyy”。
Helix Quar

18

在ajax返回的html内调试脚本的另一种直观的简单技巧是将console.log(“ test”)临时放在脚本内。

触发事件后,打开开发人员工具内的控制台选项卡。您将看到源文件链接显示在“测试”调试打印语句的右侧。只需单击源(类似于VM4xxx),即可设置断点。

PS:此外,如果您使用的是chrome,则可以考虑添加“ debugger”语句,例如@Matt Ball建议的内容


10

我的情况和解决方法:
我在HTML页面上包含一个javascript文件,如下所示:
页面名称:test.html

<!DOCTYPE html>
<html>
    <head>
        <script src="scripts/common.js"></script>
        <title>Test debugging JS in Chrome</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div>
         <script type="text/javascript">
            document.write("something");
         </script>

        </div>
     </body>
</html>

现在,在Chrome中进入Javascript调试器,然后点击脚本标签,然后如上图所示下拉列表。我可以清楚地看到脚本/ common.js不过我可以看当前HTML页面的test.html在下拉,所以我不能调试嵌入的JavaScript:

<script type="text/javascript">
  document.write("something");
</script>

那真是令人困惑。但是,当我从嵌入式脚本中删除过时的type =“ text / javascript”时

<script>
  document.write("something");
</script>

..然后刷新/重新加载页面,瞧,它出现在下拉列表中,一切都恢复了。
我希望这对在调试html页面上的嵌入式javascript时遇到问题的人有所帮助。


做得好!在Mac 10.7.4的Chrome 20.0.1132.57中进行了测试。已将错误提交给Chromium项目。
火星罗伯逊

请注意,在HTML 4和XHTML中,type是必需属性。在HTML5中,它是可选的。
hotshot309 2012年

2
它与类型无关。除非此时已经打开检查器,否则脚本将在执行后由VM收集。重新加载页面时,它没有收集脚本。
vsevik

我是我的情况,丢失<div>使我看不到调试器中的代码
ceztko

5

debugger;在我的脚本中添加最适合我的脚本。


4

我也遇到了同样的问题,即如何调试<script>标记内的JavaScript 。但是后来我在带有“”的“ Sources”选项卡下的“(index)”下找到了它。单击行号以设置断点。

在此处输入图片说明

这是Chrome 71。


2

如果看不到“脚本”标签,请确保使用正确的参数启动Chrome。当我启动Chrome浏览器以使用参数调试服务器端JavaScript时遇到了这个问题--remote-shell-port=9222。如果我不带任何参数启动Chrome,就没有问题。


您能详细说明一下吗?我遇到了这个确切的问题-根本看不到脚本选项卡。我下载了最新的chrome开发人员版本。
汤姆·雷德芬

2

我遇到了这个问题,但是我的内联函数使用了angularJS视图。因此,在负载下,我无法访问嵌入式脚本来添加调试,因为在调试器的“源”选项卡中只有index.html可用。

这意味着当我使用内联打开特定视图时(对此没有选择),它不可访问。

我能够实现的唯一方法是将一个错误的函数或内联JS函数内调用。

我的解决方案包括:

function doMyInline(data) {
        //Throw my undefined error here. 
        $("select.Sel").debug();

        //This is the real onclick i was passing to 
        angular.element(document.getElementById(data.id)).scope().doblablabla(data.id);
    }

这意味着当我单击我的按钮时,然后在Chrome Consolse中被提示。

Uncaught TypeError: undefined is not a function 

重要的是这里的来源: VM5658:6单击此按钮使我可以逐步遍历内联并将断点保持在那里以备后用。

达到它的方式非常费劲。.但是它可以工作,并且在处理动态加载视图的单页应用程序时可能很有用。

VM[n]值无明显意义,且“ n开”等于脚本ID。可以在这里找到此信息:Chrome“ [VM]”


1

使用Visual Studio(2012),我遇到了同样的问题,并切换到IIS Express解决该问题!

script标签的type属性都没有的因素进去。

由于某些原因,Visual Studio Development Server不能提供Chrome启用断点所需的一切。


1

我知道问题并不重要,Firefox但我不想添加此问题的副本以自己回答。

对于Firefox,您需要添加 debugger;以能够执行为标签建议的@ matt-ballscript

因此,在代码上,您debugger要在要调试的行上方添加,然后可以添加断点。如果仅在浏览器上设置断点,它将不会停止。

考虑到问题与Chrome有关,如果不是在此添加Firefox答案的地方。不要:(减去答案只是让我知道我应该在哪里发布它,我会很乐意将帖子移动。:)


0

这是Rian Schmits上面答案的扩展。就我而言,我的JavaScript代码中嵌入了HTML代码,除了HTML代码之外,我什么都看不到。也许这些年来,Chrome调试已发生了变化,但是右键单击“源/源”选项卡向我显示了“ 将文件夹添加到工作区”。我能够添加我的整个项目,这使我可以访问所有JavaScript。您可以在此链接中找到更多详细信息。我希望这对某人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.