Google chrome 为什么我的调试器在错误的行停止?
我正在使用Google chrome 为什么我的调试器在错误的行停止?,google-chrome,debugging,meteor,webstorm,Google Chrome,Debugging,Meteor,Webstorm,我正在使用 METEOR@1.4.4.2 WebStorm@2017.1.1 Chrome@58.0.3029.110 (64-bit) macOS Sierra 10.12.5 ecmascript@0.7.3 ecmascript-runtime@0.3.15 最近,调试器开始在错误的行停止,但只是在视觉上停止,主要是在实际断点后面8-14行 e、 g *橙色条表示google chrome中的断点 控制台输出: 另外,正如您所看到的,有些行变暗了,这意味着我无法从浏览器在那里设置断
METEOR@1.4.4.2
WebStorm@2017.1.1
Chrome@58.0.3029.110 (64-bit)
macOS Sierra 10.12.5
ecmascript@0.7.3
ecmascript-runtime@0.3.15
最近,调试器开始在错误的行停止,但只是在视觉上停止,主要是在实际断点后面8-14行
e、 g
*橙色条表示google chrome中的断点
控制台输出:
另外,正如您所看到的,有些行变暗了,这意味着我无法从浏览器在那里设置断点
WebStorm内部调试器中的行为相同。所以我认为这不是Chrome的错。看起来源映射被破坏了。我不知道原因是网络风暴还是流星。在这种情况下,很难调试…很难说清楚。在粗略的谷歌搜索中,你似乎不是唯一一个看到这一点的人。正如@MasterAM所提到的,这可能是因为来自transfilation的源地图。我不认为你可以做很多,但你可以尝试清除浏览器和IDE缓存,这似乎已经有一些工作了
很难说清楚,但您遇到的问题似乎与导致Meteor生成错误源地图的错误有关 源地图 这不是你的浏览器的“错误”。它只显示代码和项目中源映射传递给它的位置
app.js
文件和源映射(app.js.map
)由Meteor构建过程生成,并从.Meteor/local/build/programs/web.browser/app
目录提供服务
.map
文件负责告诉浏览器如何显示原始源代码,以及生成的app.js
文件中的哪些段映射到原始源代码中的哪些段
关于源地图的技术方面,可以找到一个很好的解释
您可以在线可视化源地图,并查看使用的地图(选择“自定义…”并拖放.js
和.map
文件)
可疑的虫子
作为构建过程的一部分,Meteor使用Meteor包。在某些时候,一个bug导致在babel转换后生成无效的映射
这个错误目前正在被发现,流星队的队员们似乎正在接近这个原因
你能做什么?
目前,还没有快速、简单的解决办法
您可以:
- 观察bug线程,等待它被解决并在没有源代码映射的情况下进行调试(如果bug很快被修复,可能是最好的)
- 破解相关Meteor软件包的本地克隆(可能会有用,我还没有深入研究依赖性问题,也不推荐它,但是)
- 在已知良好状态下从git签出运行Meteor,直到发布修复程序
git对分
确定bug
有关从签出运行meteor工具的方法的详细信息,请参阅,但要点如下:
首先,确保您的代码,包括.meteor/versions
和.meteor/packages
已签出到源代码管理中,因为您可能需要暂时将它们弄乱,并希望在修复错误后恢复它们
git克隆——递归https://github.com/meteor/meteor.git
到您选择的目录(例如,/home/yourname/src/remote
)cd流星
git checkout 25a89b5
以获取最后一次已知的正确提交git子模块更新--init--recursive
以确保签出后一切都是金色的/meteor--help
启动签出版本.meteor/packages
文件中删除版本信息,因为它们可能与签出时提供的版本不兼容/home/yourname/src/remote/meteor/meteor run
Meteor重置
(警告:这将清除本地mongo数据库)或至少清除部分。Meteor/local
,(例如,源地图)才能正常工作,但这可能是不必要的
对于一个我认为不久就会解决的bug来说,这是相当大的工作量,但我决定将此信息部分地包括在内,以便用作将来与sourcemap相关问题的文档。不确定此场景,但在使用eclipse调试java时遇到了类似的情况。当源代码nd正在调试的编译/解释代码-不同 试着调试一个简单的js代码,以验证chrome的js调试器本身是否有问题。如果它能工作,那么对未“启用调试”的代码行的解释是它们都在同一行上(直到记录“7”的语句)。这也可能抵消了浏览器中的行号
这是一种可能的解释。我要补充的是,在调试模式下,缩小的js文件的漂亮打印会在代码中的实线和移位行之间添加偏移量(do to Pretty print)
因此,避免在调试模式下进行漂亮的打印,您将坚持正确的路线。已经晚了三年,但如果有人遇到这个问题。 问题在于IDE和生成.map文件的编译器对行分隔符的不同解释。 例如,在WebStorm和Angular项目中的窗口上,如果行分隔符是Unix样式(仅LF),TypeScript编译器将忽略它们。 在这种情况下,如果代码格式化程序将太长的行转换为两个较短的行,并将这些行仅拆分为LF,则在.map文件中,这一原本单行将被解释为