如何在 Chrome 或 Safari 中的缩小 JS 函数上设置断点?

Posted

技术标签:

【中文标题】如何在 Chrome 或 Safari 中的缩小 JS 函数上设置断点?【英文标题】:How to set a breakpoint on a minified JS function in Chrome or Safari? 【发布时间】:2011-11-14 00:46:14 【问题描述】:

我想在 Chrome 或 Safari javascript 调试器的“Cart.add”函数中设置断点。问题是,这个函数是在一个大的缩小的 JS 文件中定义的,并且它本身并不存在于一行中。

一些文档说基于 WebKit 的调试器支持调试控制台中的“break”或“debug”命令,但这些似乎不适用于较新版本的调试器。

在JS文件的那设置断点也不起作用,因为那行有很多函数。

有什么建议吗?

【问题讨论】:

你能把 javascript 解压然后再做一次吗? ***.com/questions/822119/… 【参考方案1】:

在 Chrome 中,当您打开 Scripts 选项卡时,您可以通过单击底部的 按钮(“漂亮打印”)来美化所选文件。之后,您可以找到您的行并设置断点。页面刷新后,代码将保留在适当位置的断点美化。

【讨论】:

这个技巧太棒了,不要以为我会自己想出来。 不,它不会保持美化 对我不起作用。它保持美化但永远不会到达断点,总是执行缩小的脚本。 出于某种原因,这并不适合所有人:code.google.com/p/chromium/issues/detail?id=415406 这个功能曾经可以工作,但现在 (53.0.2785.143) 我不能再让它工作了。很想知道它是 chrome 中的错误/功能丢失,还是我破坏的设置/我做错了什么【参考方案2】:

debugger statement 可能就是您要找的。​​p>

评估 DebuggerStatement 产品可能允许实现在调试器下运行时导致断点。如果调试器不存在或不处于活动状态,则此语句没有可观察到的效果。

生产 DebuggerStatement : debugger ; 的评估如下:

    如果实现定义的调试工具可用并启用,则

    一个。执行实现定义的调试操作。

    b.让 result 是实现定义的 Completion 值。

    其他

    一个。让结果为(正常、空、空)。

    返回结果。

break 语句用于退出循环和switch 语句,与调试无关。

不过,真正的解决方案是一开始就不要篡改代码 :)

【讨论】:

【参考方案3】:

1) 错误消息应为您提供指向源代码的链接 来源选项卡。单击该链接可转到已转译的代码。

2) 点击源代码底部的“ ”图标 Sources 选项卡以格式化转译的代码以便于调试。

3) 在失败的行处设置断点。

4) 再现 又出问题了。这一次,它应该在之前的断点处中断 发生错误。

5) 检查局部变量并调用堆栈 确定到底出了什么问题。

【讨论】:

【参考方案4】:

对于 chrome 用户,您需要在实验性功能中启用自动漂亮打印。

现在应该可以设置断点了。

【讨论】:

【参考方案5】:

如果您已保存网页,则使用 jsbeautifier.org 美化您的 js 文件,该文件会格式化您的整个脚本。然后用美化版本替换你的js内容。从这里您可以轻松调试您的 JS

【讨论】:

请注意,当您处理缩小的 js 文件时,通常意味着您正在调试生产环境中的某些内容。大多数情况下,您无法访问该环境以将脚本替换为美化版本,或者即使您这样做,也不应该这样做。

以上是关于如何在 Chrome 或 Safari 中的缩小 JS 函数上设置断点?的主要内容,如果未能解决你的问题,请参考以下文章

使 Firefox 图像缩小类似于 Chrome 或 IE 中的结果

在 WKWebView 中加载 safari 或 chrome 中的链接/URL

如何在 div 或 iframe 等其他元素上模拟活动输入或 textarea 周围的 Chrome/Safari 边框?

两个iPhone浏览器的对决:Safari与Chrome

chrome和safari中的css菜单悬停“挂起”

如何摆脱 Chrome/Safari 上的文本框选择突出显示? [复制]