Cocos Creator 使用SourceMap定位问题

Cocos在编译打包的时候,会把JS代码做混淆并且转换成字节码。
假如有以下报错信息

TypeError: Cannot read property 'TestCrash' of undefined
at t.onLoad (mahjong/src/project.js:1580:7)
at CCClass.eval [as _invoke] (eval at createInvokeImpl (src/jsb_polyfill.js:4659:53), <anonymous>:3:65)
at CCClass.invoke (src/jsb_polyfill.js:4609:18)
at CCClass.activateNode (src/jsb_polyfill.js:13659:25)
at CCClass._onHierarchyChanged (src/jsb_polyfill.js:19768:85)
at CCClass._onHierarchyChanged (src/jsb_polyfill.js:2662:16)
at CCClass.setParent (src/jsb_polyfill.js:19564:32)
at t.onLoad (mahjong/src/project.js:2989:15)
at CCClass.eval [as _invoke] (eval at createInvokeImpl (src/jsb_polyfill.js:4659:53), <anonymous>:3:65)
at CCClass.invoke (src/jsb_polyfill.js:4609:18)

我们可以看到 t.onLoad这个函数里 testCrash报错了
但是"t"是哪个函数,如果有很多函数叫testCrash,那么根本无从查起,这时候要用到SourceMap了

如果你在打包时勾选了SourceMap 就会在编译后生成project.js.map文件

打包包含SourceMap
生成的SourceMap文件

这个文件包含了原始的文件,打包过后的类名变量行列号等等信息。

我们要做到的就是,拿到报错的行列号,找出对应的原始代码的行列号。

sourcemap地址: https://github.com/mozilla/source-map

安装nodejs后 安装sourcemap

$ npm install source-map

新建一个js脚本
把project.js.map 重命名为project.json

var line = Number(process.argv[2]);
var column = Number(process.argv[3]);

var sourceMap = require('source-map');
var rawSourceMap = require("./project.json")

sourceMap.SourceMapConsumer.with(rawSourceMap, null, consumer => {
  console.log("originalPositionFor: line :", line, "column:", column, "\n", consumer.originalPositionFor({
    source: "./",
    line: line,
    column: column
  }));
});

调用脚本

$ node convertSourceMap.js 1580 7
 { source: '/source/assets/Script/GameMahjongMain.ts',
  line: 200,
  column: 8,
  name: 'TestCrash' }

这时候就会打印原始的文件和行列号了
我们就会知道 上文中那个"t" 就是 GameMahjongMain.ts,报错的行号是200

————————
想要学习Cocos的同学,欢迎关注我的零基础Cocos教程
https://ke.qq.com/course/313749
QQ群:793824456

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 11,808评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,302评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,227评论 6 342
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,806评论 18 399
  • 从后悔远嫁开始内心就挣扎着,看不得那种远嫁负能量的文章,虽然公婆待我如己出,但内心始终迈不出那个不孝的漩涡,无数次...
    柳树姑娘阅读 2,967评论 0 2

友情链接更多精彩内容