Skip to content

Capture automatique

This content is not available in your language yet.

Dès l’appel à Pionne.init(), le SDK installe trois mécanismes globaux pour capturer ce qui passerait normalement à la trappe.

Pionne s’abonne à ErrorUtils.setGlobalHandler (mécanisme React Native standard). Toute exception qui remonte jusqu’à la boucle de rendu sans être catchée est capturée avec mechanism: { type: 'global', handled: false }.

// Capturé automatiquement, aucun code requis
function MyScreen() {
throw new Error('Boom');
}

Sur Hermes, Pionne active HermesInternal.enablePromiseRejectionTracker :

// Ces deux cas sont capturés
fetch('/x').then((r) => r.nopeNotAFunction());
(async () => {
throw new Error('async crash');
})();

Pionne wrappe setTimeout, setInterval et requestAnimationFrame pour catcher les exceptions qui s’échappent du callback :

setTimeout(() => {
throw new Error('Timer crash'); // capturé avec mechanism.type = 'timer'
}, 1000);
CasComportement
RedBox devAffichée par RN, l’event est aussi envoyé
HMR / Fast RefreshLes handlers sont préservés à travers les reloads
Hermes en devPromise tracker actif uniquement après Pionne.init
Metro symbolicationStacks lisibles en dev, voir source maps pour la prod

Le SDK envoie tout par défaut, même en dev. Si tu veux uniquement la prod :

Pionne.init({
token: '...',
enabled: !__DEV__, // pas d'envoi en dev
});
<Button title="Crash sync" onPress={() => { throw new Error('sync'); }} />
<Button title="Crash async" onPress={async () => { throw new Error('async'); }} />
<Button title="Crash timer" onPress={() => setTimeout(() => { throw new Error('timer'); }, 100)} />

Les trois doivent apparaître dans le dashboard sans try/catch.