Que signifie 8badf00d?

Parfois, mon application iPhone se bloque avec un crashlog étrange, qui lit le code d'exception est 0x8badf00d. les stacktraces montrent des instantanés aléatoires de l'exécution de l'application, mais rien de suspect. Cela arrive très rarement et je ne suis pas en mesure de savoir comment le reproduire. Est-ce que quelqu'un en sait plus sur ce genre d'exception et de code d'exception?

Voici un extrait de mes crashlogs:

Type D'Exception: 00000020
Codes d'Exception: 0x8badf00d
Fil En Surbrillance: 0

Informations Spécifiques À L'Application:
Impossible de désactiver

Fil 0:
...

...

Thread inconnu s'est écrasé avec une saveur inconnue: 5, state_count: 1

35
demandé sur Vladimir Grigorov 2009-04-21 20:20:12

7 réponses

0x8badf00d est le code d'erreur que le chien de garde soulève lorsqu'une application prend trop de temps à lancer ou à terminer. Voir Apple rapport d'incident pour iPhone OS Applications de document

82
répondu rpetrich 2013-03-01 18:41:35

, Il est HexSpeak, voir ici: http://en.wikipedia.org/wiki/Hexspeak

8
répondu SQLMenace 2009-04-21 16:26:43

Si vous obtenez Exception Type: 00000020 et Exception Codes: 0x8badf00d alors c'est rapports de plantage de délai d'attente de chien de Garde. Le code d'exception 0x8badf00d est appelé "ate bad food".

Le plus commun reason for this crash is synchronous activity on main thread. La solution est de switch to asynchronous activity sur le thread principal.

Capture D'écran pour le document Apple

Reportez-vous à ce document Apple pour plus de détails.

8
répondu Jayprakash Dubey 2016-04-15 10:09:37

C'est un code d'échec ajouté par un dev avec un bon sens de l'humour. Parce que hexadécimal utilise des lettres ainsi que des chiffres, il est possible de trouver des nombres hexadécimaux qui ressemblent à peu près à des mots anglais, tels que "0xdeadbeef", etc. Je suis sûr que l'exception a une signification spécifique, mais s'il n'y a pas de symptômes majeurs associés, vous pouvez probablement l'ignorer sans trop vous inquiéter.

1
répondu Paul Sonier 2009-04-21 16:25:15

C'est l'idée d'un programmeur d'une blague. Vous devez choisir un numéro pour votre code, mais le numéro ne signifie pas nécessairement quoi que ce soit en soi. 8badf00d est juste une autre façon d'écrire le nombre 2,343,432,205, et a été choisi parce qu'il semble "drôle" lorsqu'il est représenté en hexadécimal pour un journal d'exception.

1
répondu Joel Coehoorn 2009-04-21 16:25:30

0x8badf00d exception est soulevée par apple fourni chien de garde. La cause la plus fréquente de pannes de délai de surveillance dans une application réseau est la mise en réseau synchrone sur le thread principal. Il y a quatre facteurs contributifs ici:

Réseau synchrone - c'est là que vous faites une demande réseau et bloquez l'attente de la réponse.

Thread principal-la mise en réseau synchrone n'est pas idéale en général, mais elle provoque des problèmes spécifiques si vous le faites sur le thread principal. Rappelez-vous que l' thread principal est responsable de l'exécution de l'interface utilisateur. Si vous bloquez le thread principal pendant une période significative, l'interface utilisateur ne répond plus de manière inacceptable.

Longs délais d'attente-si le réseau disparaît (par exemple, l'utilisateur est dans un train qui entre dans un tunnel), toute requête réseau en attente n'échouera pas tant qu'un certain délai n'aura pas expiré. La plupart des délais d'attente réseau sont mesurés en minutes, ce qui signifie qu'une requête réseau synchrone bloquée sur le thread principal peut conserver interface utilisateur ne répond pas pendant des minutes à la fois.

Essayant d'éviter ce problème en réduisant le délai d'attente réseau n'est pas une bonne idée. Dans certaines situations, cela peut prendre plusieurs secondes pour qu'une demande de réseau réussisse, et si vous expirez toujours tôt, vous ne progresserez jamais du tout.

Chien de garde - afin de garder l'interface utilisateur réactive, iOS inclut un mécanisme de chien de garde. Si votre application ne répond pas à certains événements de l'interface utilisateur (lancement, suspension, reprise, terminez) dans le temps, le chien de garde va tuer votre application et générer un rapport de plantage de délai d'attente de chien de garde. Le temps que le chien de garde vous donne n'est pas formellement documenté, mais il est toujours inférieur à un délai d'attente réseau.

Il y a deux solutions communes:

Réseau asynchrone-la meilleure solution à ce problème est d'exécuter votre code réseau de manière asynchrone. Le code réseau asynchrone présente un certain nombre d'avantages, dont le moindre est qu'il vous permet accédez au réseau en toute sécurité sans avoir à vous soucier des threads.

Réseau synchrone sur un thread secondaire - s'il est prohibitif d'exécuter votre code réseau de manière asynchrone (peut-être que vous travaillez avec une grande base de code portable qui suppose un réseau synchrone), vous pouvez éviter le chien de garde en exécutant votre code synchrone sur un thread secondaire.

Reportez-vous à apple docs pour plus d'informations.

0
répondu VivekRajendran 2018-07-05 05:57:36

De wikipedia 0xBAADF00D ("bad food") est utilisé par LocalAlloc de Microsoft (LMEM_FIXED) pour indiquer la mémoire de tas allouée non initialisée lorsque le tas de débogage est utilisé.[7]

-6
répondu iquanyin 2013-08-18 15:18:34