Cocos在編譯打包的時候搀暑,會把JS代碼做混淆并且轉(zhuǎn)換成字節(jié)碼磕道。
假如有以下報錯信息
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這個函數(shù)里 testCrash報錯了
但是"t"是哪個函數(shù)燕耿,如果有很多函數(shù)叫testCrash,那么根本無從查起它抱,這時候要用到SourceMap了
如果你在打包時勾選了SourceMap 就會在編譯后生成project.js.map文件
這個文件包含了原始的文件份名,打包過后的類名變量行列號等等信息。
我們要做到的就是租副,拿到報錯的行列號坐慰,找出對應的原始代碼的行列號较性。
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
}));
});
調(diào)用腳本
$ 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