Ce qui est un moyen fiable de faire une application iOS crash?
Je veux tester mon application rapport d'incident dans le domaine délibérément l'avoir crash lorsque l'utilisateur effectue une action spécifique que d'un réel de l'utilisateur est peu probable de faire accidentellement.
Mais ce qui est un bon moyen fiable de faire de l'app crash qui n'est pas de créer une alerte au moment de la compilation?
Edit: Noter que de nombreux apparemment évidente à cette question des réponses suite à des exceptions que de se faire attraper par le Cacao et donc n'ont pas de résultats dans l'application crash.
- Je suis
WebKit discarded an uncaught exception
pour toutes ces idées jusqu'à présent! Qui savait qu'il était si difficile de faire une appli crash ces jours-ci? - Je ne pense pas que l'un de ces n'a rien à voir avec WebKit...
- Yep, ouvrez Safari sur un iPad 1 et accédez à une page avec beaucoup d'images. Fonctionne toujours pour moi. :/
(void)0/0;
,(void)*(char*)0;
- Soyez prudent avec certaines des réponses ici invoquant undefined behavior. C'est effectivement très méchant conseils!!!
- Par définition, un essai est une tentative d'invoquer un comportement indéfini.
- très méchant, des conseils parce que, théoriquement, il pourrait causer à l'application pour faire autre chose que de l'écraser? Pas vraiment méchant, est-il?
- C++ comportement indéfini est plus complexe que cela. Voir blog.regehr.org/archives/213 Undefined signifie que la violation d'accès n'est pas garanti. Au lieu de cela, le compilateur peut-il suffit de supprimer le code arbitrairement par exemple.
- pas du tout. Un comportement indéfini est un C/C++ concept. Vous ne voulez jamais il. Voir blog.regehr.org/archives/213
Vous devez vous connecter pour publier un commentaire.
en Objective-C C directement à cause d'un mauvais accès
Note: bien que cela fonctionne sur n'importe quel système je sais -- dans une future version du runtime C OU le compilateur cela pourrait ne pas conduire à un crash plus. voir Est déréférencement de pointeur null comportement indéfini en Objective-C?)
(en swift que vous auriez à pont à objC pour ce faire)
WebKit discarded an uncaught exception
problème aussi.Mon chouchou:
Un classique:
Et certains pr0n:
Tous générer des plantages capturé par mon crash de l'outil de reporting.
assert
n'est pas une fonctionnalité de débogage. Un échec de l'affirmer, c'est un bug que vous avez pensé impossible. Il est préférable d'abandonner, même un communiqué de construire, de maintenir l'exécution d'un programme avec des conséquences imprévisibles.assert
signifie exactement ce que l'OP est en demandant: "Cela ne doit jamais arriver". Laissant une assertion de travail dans un communiqué de construire n'est pas difficile et il n'y a rien de mal à le faire.assert(0)
pourrait mettre fin à plus gracieusement qu'un mauvais accès. Pour tester des rapports d'incidents correctement, je veux quelque chose d'aussi méchant comme un réel bug imprévu.Depuis que nous utilisons tous Clang pour iOS, c'est assez fiable:
Cela a l'avantage qu'il est conçu pour exactement cet effet, de sorte qu'il ne devrait pas générer les avertissements du compilateur ou d'erreurs.
abort();
provoque un arrêt anormal... C'est un accident.Comment sur un bon débordement de pile 🙂
Plus populaire - non comptabilisé sélecteur de crash:
Assurez-vous que vous n'avez pas -fasd méthode mise en œuvre dans la classe haha
Ou de l'indice au-delà lié exception:
Et bien sûr
kill( getpid(), SIGABRT );
Envoyer un message à un désalloué objet
Je pense que dans Swift, vous pouvez facilement lancer une erreur fatale:
Il est en fait même l'intention d'utiliser cette fonction dans le cas où quelque chose va mal, afin de rendre l'application crash.
Pour éviter une instruction if dans un cas particulier, vous pouvez utiliser
precondition
, trop. Il est similaire à laassert
, fait donc l'intention (si voulu) assez clair et est pas supprimé dans la version finaleassert
. Il est utilisé commeprecondition(myBoolean, "This is a helpful error message for debugging.")
.(doit... type... 30 caractères)
Vous pouvez également déclencher une exception:
Ajouter un geste de reconnaissance à vue, il reconnaît une 10 doigts (5 doigts pour iPhone 10 pouvez obtenir un peu de monde). La GR est une méthode attaché à ce que l'exécute n'importe qui de le mentionné précédemment moyens infaillibles pour obtenir de votre application à l'écrasement. La plupart des utilisateurs ne vont pas pondre 10 doigts vers le bas sur votre application, donc vous êtes sûrs de l'utilisateur accidentellement à l'origine du crash.
Cependant, vous devriez être en mesure d'utiliser quelque chose comme Testflight ou tout simplement de le déployer sur les appareils personnels et de test dans la nature avant de les soumettre à Apple. Après avoir forcé un crash pouvait obtenir votre application rejetée par Apple.
pourrait essayer quelque chose comme
devrait bloquer sur une EXC_BAD_ACCESS (peut-être besoin de libérer une deuxième fois, mais normalement il devrait planter comme ça déjà)
Je vais aller avec:
int raise(int sig);
Pour obtenir plus d'infos
>man raise
Je voudrais juste tuer le processus normalement:
Donc, si vous installez un gestionnaire de signal vous pouvez également gérer l'accident, à la finition et à écrire les fichiers ouverts et de ces choses.
- Je utiliser
Lorsque l'on travaille avec RubyMotion j'utilise ceci:
Essayez ceci:
un mauvais
NSLog
déclaration il