2

index.android.bundle:474:6500 を指す crashlytics スタック トレース行からソース ファイルの行と列の情報を取得する方法は?

crashlytics レポートのスタック トレース テキストは次のようになります。

Non-fatal Exception: io.invertase.firebase.crashlytics.UnhandledPromiseRejection: undefined is not an object (evaluating 't.includes')
       at .removeFile(index.android.bundle:474:6500)
       at .<unknown>(index.android.bundle:758:3472)
       at .y(index.android.bundle:105:596)
       at .<unknown>(index.android.bundle:105:2546)
       at .y(index.android.bundle:105:596)
       at .o(index.android.bundle:105:1483)
       at .<unknown>(index.android.bundle:105:1626)
       at .f(index.android.bundle:101:155)
       at .<unknown>(index.android.bundle:101:1012)
       at .y(index.android.bundle:107:657)
       at .C(index.android.bundle:107:1021)
       at .callImmediates(index.android.bundle:107:3216)
       at .callImmediates([native code]:0:0)
       at .value(index.android.bundle:25:3080)
       at .<unknown>(index.android.bundle:25:1264)
       at .value(index.android.bundle:25:2772)
       at .value(index.android.bundle:25:1234)
       at .value([native code]:0:0)
       at .value([native code]:0:0)

stack-beautifier を試しましたが、成功は限られていました。より信頼できる方法はありますか?

4

1 に答える 1

3

良い解決策を見つけようと何日も費やしました。これは私が今まで見つけた中で最高です。

1) Git タグからソース マップを作成するか、Crashlytics レポートのバージョンに対応するハッシュをコミットします。

iOS

react-native bundle --platform ios --entry-file index.js --dev false --reset-cache --bundle-output /tmp/bundle.ios.js --assets-dest /tmp/ --sourcemap-output sourcemap.ios.js.map

Android は build gradle から自動的にビルドします

// https://github.com/facebook/react-native/issues/7393
// https://stackoverflow.com/questions/34715106/how-to-add-sourcemap-in-react-native-for-production/34733906
project.ext.react = [
    entryFile: "index.js",
    enableHermes: false,  // clean and rebuild if changing    
    extraPackagerArgs: ["--sourcemap-output", 
    file("$buildDir/../../../sourcemap.android.js.map")]
]

または手動でビルドします。

react-native bundle --platform android --entry-file index.js --dev false --reset-cache --bundle-output /tmp/bundle.android.js --assets-dest /tmp/ --sourcemap-output sourcemap.android.js.map

2) メトロシンボリケートの使い方

  1. Google Firebase コンソールでクラッシュ レポートを開く

  2. [スタック トレース] タブを選択します

  3. [ TXT ] タブを選択し、テキストを mytrace.txt という名前のファイルに保存します。

  4. " [native code] "を含む最初の行から始まるすべてのスタック トレース行を削除します。" [native code] " が問題を引き起こす可能性があるためです。

  5. 結果の例: エラーは Utility.js:567 で発生します

npx metro-symbolicate sourcemap.android.js < fs-27-stack-trace.txt                                                                 
Non-fatal Exception: io.invertase.firebase.crashlytics.UnhandledPromiseRejection: undefined is not an object (evaluating 't.includes')
       at .removeFile(/Users/eddie/Documents/projects/react-native/my-react-native-app/v1.6.1146/source/app/components/Utility.js:567:includes)
       at .<unknown>(/Users/eddie/Documents/projects/react-native/my-react-native-app/v1.6.1146/source/app/components/software-downloader/DownloadClient.js:237:oldVersion)

これが他の人に役立つことを願っています。

于 2021-05-26T17:10:26.810 に答える