2012-05-11 2 views
2

Je suis en train de développer une application sur Mac OS X qui est susceptible de planter parfois (bien, pas à cause de mon application, mais à cause d'une prise tierce instable) -l'application fonctionne comme un pare-feu de crash, de nombreux crashs peuvent survenir au démarrage, donc pas besoin de bugter l'utilisateur à ce sujet pour le moment).Mac OS X: empêche la fenêtre de rapport d'erreur d'apparaître dans mon application

Y a-t-il un moyen pour d'empêcher la fenêtre de rapport d'erreur de s'ouvrir devant l'utilisateur?

Merci!

PS: ceci est au sujet de cette fenêtre, mais pas pour WebKit: A crash reporting window on Mac OS X

+1

Qu'est-ce qu'un "pare-feu crash?" –

+0

@RobNapier: par "crash firewall" Je veux dire une méthode pour empêcher un crash de se propager à tout l'univers. – moala

+0

Cela a-t-il quelque chose à voir avec "MachExceptionHandler" dans certains fichiers de configuration .plist? – moala

Répondre

3

Je ne connais pas de solution réellement prise en charge, mais il existe des moyens (laids) pour y parvenir.

D'abord, vous devez vous-même attraper le signal. Je suppose que vous savez comment faire cela (voir sigaction). Ensuite, dans votre gestionnaire de signal de panne, appelez _exit(). C'est avec un soulignement principal. C'est une version plus rapide et moins sûre de exit(). Cela permettra généralement d'éviter le crash journaliste. Je l'ai utilisé dans certains projets C++ qui avaient une telle gestion de la mémoire flakey qu'ils se sont souvent écrasés à l'arrêt. Je ne suis pas fier de ça; Je dis juste que cela fonctionne ....

L'autre solution consiste à lancer un deuxième processus au cours de votre gestionnaire d'écrasement. Le second processus attend le lancement de CrashReporter. Quand c'est le cas, tuez-le. La dernière fois que j'ai testé cette approche était 10.5. Je ne sais pas si 10.7 lance toujours le même type de processus pour afficher cette alerte.

+0

Votre option CrashReporterKiller est tout à fait ** moche sanglante **. Je vais essayer votre option de signal/_exit, merci! – moala

+0

Killing CrashReporter n'est certainement pas une bonne réponse. Mais la gestion des signaux est bonne. Vous voudrez exécuter chaque plugin dans son propre processus, avec un gestionnaire de signal. Vous pouvez regarder le plugin de Chrome et les solutions similaires dans de nombreux serveurs Web qui ont inspiré Chrome pour des exemples, mais dans ce cas, il est généralement plus facile de le construire vous-même que de suivre les exemples, surtout si vous voulez uniquement prendre en charge OS X au lieu de chaque plate-forme. – abarnert

1

Pour une solution de système, lisez man ReportCrash. Cependant cette solution n'est pas spécifique à une application.

Questions connexes