当我在Google Chrome中打开开发者工具时,我看到了各种功能,如Profiles,Timelines和Audits,但是一些基本功能却缺失,例如能够在js文件和html和javascript代码内设置断点。我尝试使用JavaScript控制台,但它本身存在漏洞 - 例如,一旦遇到JS错误,除非刷新整个页面,否则无法解决。有人可以帮忙吗?
当我在Google Chrome中打开开发者工具时,我看到了各种功能,如Profiles,Timelines和Audits,但是一些基本功能却缺失,例如能够在js文件和html和javascript代码内设置断点。我尝试使用JavaScript控制台,但它本身存在漏洞 - 例如,一旦遇到JS错误,除非刷新整个页面,否则无法解决。有人可以帮忙吗?
你是在谈论在 <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>
N.B. 如果开发者工具未打开,Chrome不会在debugger
处暂停。
您还可以在JS文件和<script>
标记中设置属性断点:
<script>
标签的 HTML 文件。FF 上的 Firebug 也有类似的下拉菜单,但还列出包含 <script>
标签的 HTML 文件。这是一个错误吗,还是有另一种方法可以在内联的 JS 代码中设置断点? - Wolfram Arnold使用源代码选项卡,您可以在其中设置JavaScript断点。在其下方的目录树(带有向上和向下箭头),您可以选择要调试的文件。您可以通过按同一选项卡右侧的“继续”来解除错误。
<script> your code </script>
,请添加一个名称,例如:<script> your code //# sourceURL=somename.js </script>
。更好的解释在下面的答案中。点击此处查看。 - KM.您还可以给脚本起一个名称:
<script>
...(在此处编写您的代码)
//# sourceURL=文件名.js
</script>
当然,请将“文件名”替换为实际的名称。然后,您就可以像调试其他脚本一样,在Chrome调试器中查看它:选择“Sources > top > (no domain) > 文件名.js”,这会将其显示为普通脚本,您可以对其进行调试。
在开发者工具中打开脚本标签页,并刷新包含脚本的页面。这将在文件列表中添加一个(程序)条目,其中显示了包括脚本在内的页面的HTML内容。从这里,您可以添加断点。
另一个直观简单的调试技巧,特别是在通过ajax返回的html中调试脚本,是将console.log("test")暂时放置在脚本内。
一旦你触发了事件,在开发者工具中打开控制台选项卡。 你将看到“test”调试输出附近右侧显示源文件链接。只需点击源文件链接(类似于VM4xxx),您现在就可以设置断点。
P.S.:此外,如果您正在使用Chrome浏览器,您可以考虑使用"debugger"语句,就像@Matt Ball所建议的那样。
我的情况以及我所采取的修复措施:
我在一个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调试器,点击“Scripts”选项卡并展开上面显示的列表。 我可以清晰地看到 scripts/common.js,但是我无法在下拉列表中看到当前的HTML页面test.html,因此我无法调试嵌入式JavaScript:<script type="text/javascript">
document.write("something");
</script>
那真是令人困惑。但是当我从嵌入的脚本中去掉了过时的type="text/javascript"之后:
<script>
document.write("something");
</script>
刷新/重新加载页面后,出现在下拉列表中,一切都恢复正常。
我希望这对于任何遇到在HTML页面上调试嵌入式JavaScript的问题的人都有所帮助。
<div>
导致我无法在调试器中看到代码。 - ceztkodebugger;
对我很有帮助。我知道这个问题与Firefox
无关,但我不想添加一个复制此问题的副本来回答它。
对于Firefox,您需要添加debugger;
才能像@matt-ball建议的那样为script
标记进行调试。
因此,在您的代码中,在要调试的行上面添加debugger
,然后就可以设置断点。如果您只在浏览器上设置断点,则不会停止执行。
如果这不是添加Firefox答案的地方,因为问题是关于Chrome的,请勿:(减去答案,只需让我知道应该在哪里发布它,我将乐意移动帖子。:)
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);
}
Uncaught TypeError: undefined is not a function
VM5658:6
,点击它允许我浏览内联内容并在那里设置断点以供以后使用...这是一种非常复杂的方法,但它起作用了,对于处理动态加载视图的单页应用程序可能会有用。 VM [n]
没有什么重要价值,而n
只等于脚本ID。 可以在此处找到此信息:Chrome“[VM]”。
.php
文件中,但Chrome无法在Chrome开发工具的“源”选项卡中显示源文件。我尝试了Firefox,一切都按预期工作。 - Rick