2009-06-29 4 views
1

Ceci est un client MMO en temps réel, à un certain point aléatoire, il va planter avec un saut à 0, et la trame de la pile est illisible. Le CrashReporter (et gdb) fera rapport thead 0 écraséSur MacOSX/PPC, des suggestions sur comment attraper KERN_PROTECTION_FAILURE à 0x0000000000000000

XC_BAD_ACCESS (SIGBUS) KERN_PROTECTION_FAILURE à 0x0000000000000000

et srr0 = lr = adresse d'exception = 0

Comment puis-je attraper où cette erreur se produit?

+0

Pourriez-vous publier le résultat de la commande gdb 'info registers' - il pourrait y avoir quelques informations utiles là-dedans. – DaveR

Répondre

0

Si votre pointeur de pile (r1) et le registre de liaison sont saccagés, cela ne semble pas être satisfaisant. Cependant, il est possible que d'autres registres aient encore la valeur d'un pointeur d'image - par exemple, des fonctions non-feuilles voient souvent l'adresse vers laquelle ils retournent vers/depuis la pile via r0. A part ça, il y a quelques trucs que vous pourriez tirer - en supposant qu'il n'y a rien de mappé dans l'espace adresse des processus à l'adresse 0x0 (ce qui semble être le cas de l'erreur EXEC_BAD_ACCESS) vous pouvez écrire une bibliothèque de préchargement simple qui a mappé la page zéro; ce qui vous permettrait d'ajouter un point de rupture au 0x0; ce qui peut vous donner plus d'informations sur ce qui se passe.

Questions connexes