Simbolizando um rastreamento de pilha
Se um aplicativo React Native lançar uma exceção não tratada em uma compilação de lançamento, a saída poderá ficar ofuscada e difícil de ler:
07-15 10:58:25.820 18979 18998 E AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
07-15 10:58:25.820 18979 18998 E AndroidRuntime: Process: com.awesomeproject, PID: 18979 07-15 10:58:25.820 18979 18998 E AndroidRuntime: com.facebook.react.common.JavascriptException: Failed, js engine: hermes, stack:
07-15 10:58:25.820 18979 18998 E AndroidRuntime: p@1:132161
07-15 10:58:25.820 18979 18998 E AndroidRuntime: p@1:132084
07-15 10:58:25.820 18979 18998 E AndroidRuntime: f@1:131854
07-15 10:58:25.820 18979 18998 E AndroidRuntime: anonymous@1:131119
As seções como p@1:132161
são nomes de funções reduzidos e deslocamentos de bytecode. Para depurar o problema, você deve traduzi-lo em nome de arquivo, linha e função: AwesomeProject/App.js:54:initializeMap
. Isso é conhecido como simbolização. Você pode simbolizar nomes de funções minificados e bytecode como acima, passando metro-symbolicate
um mapa de origem gerado e o rastreamento de pilha.
INFORMAÇÃO
O pacote metro-symbolicate
é instalado por padrão no projeto de modelo React Native ao configurar seu ambiente de desenvolvimento.
De um arquivo contendo o stacktrace:
npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map < stacktrace.txt
Diretamente do adb logcat
:
adb logcat -d | npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
Isso transformará cada nome de função minificado e deslocamento como p@1:132161
no nome real do arquivo e da função AwesomeProject/App.js:54:initializeMap
.
Notas sobre mapas de origem
- Vários mapas de origem podem ser gerados pelo processo de construção. Certifique-se de usar aquele no local mostrado nos exemplos.
- Certifique-se de que o mapa de origem usado corresponda ao commit exato do aplicativo com falha. Pequenas alterações no código-fonte podem causar grandes diferenças nos deslocamentos.
- Se o
metro-symbolicate
sair imediatamente com sucesso, certifique-se de que a entrada venha de um pipe ou redirecionamento e não de um terminal.