2016-06-14 33 views
3

谷歌在播放堆栈跟踪点导致死机的:如何在JS源代码中跟踪JavaScriptException index.android.bundle:424:4194到行号?

com.facebook.react.modules.core.JavascriptException: addWaypointDone 
    index.android.bundle:424:4194 

我提取index.android.bundle从APK。

如何从424:4194获得JS源代码行号?

谢谢丹尼尔。你的方法从命令行为我工作!

我试着把这个添加到android/app/react.gradle,但我找不到和./android目录下的source.map文件。

commandLine "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}”, 
"--sourcemap-output", "source.map", 
"--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets dest", resourcesDir 

有没有办法自动构建source.map文件的时间?

在此先感谢,

回答

4

要获得确切的位置,您需要一个源地图。如果你不保留那些部署,你可以重新生成它。

  • 退房从您的VCS部署的确切版本
  • 与源地图的输出将其捆绑:react-native bundle --entry-file index.android.js --platform android --dev false --sourcemap-output source.map --bundle-output main.jsbundle(请确保您使用您在新闻稿中完全相同的依赖版本)
  • 创建一个文件findpos.js包含以下代码:

findpos.js

var sourceMap = require('source-map'); 
var fs = require('fs'); 

var sourcemap = JSON.parse(fs.readFileSync('source.map', 'utf8')); 

var smc = new sourceMap.SourceMapConsumer(sourcemap); 

console.log(smc.originalPositionFor({ 
    line: 424, 
    column: 4194 
})); 
  • 执行脚本node findpos.js

你应该得到的错误(文件,行和列)的确切位置。

+0

谢谢丹尼尔。您的apparoach可以从命令行为我工作。
我试着把这个添加到android/app/react.gradle,但是我找不到和./android目录下的source.map文件。 commandLine“react-native”,“bundle”,“--platform”,“android”,“ - dev”,“$ {devEnabled}”, “--sourcemap-output”,“source。map“, ”--entry-file“,entryFile,”--bundle-output“,jsBundleFile,”--assets-dest“,resourcesDir 有没有办法自动构建source.map文件? –

+0

目前,您必须将node_modules/react-native/react.gradle复制到您的项目中,添加sourcemap,然后使用它来代替官方gradle。这不是很好,但它可以工作。有人已经创建了一个问题:https:/ /github.com/facebook/react-native/issues/7393 –

+0

谢谢@Deniel我在https://github.com/facebook/react-native/issues/7393 –

0

如何使用的Atom找到从谷歌index.android.bundle

  1. 获取堆栈跟踪异常的源代码播放
  2. 重命名zip扩展apk文件,提取的apk
  3. 使用Atom或其他编辑器,打开提取的 '''资产/ index.android.bundle”
  4. 编辑>跳转到线,从堆栈跟踪,424:4194

从index.android.bundle中删除所有空格,并将行连接到一行。但它确定了罪魁祸首。