Comment «définir un point d'arrêt dans malloc_error_break pour déboguer»

126

J'obtiens beaucoup de sorties de console comme celle-ci sans que mon application ne plante:

malloc: * erreur pour l'objet 0xc6a3970: le pointeur en cours de libération n'a pas été alloué * définir un point d'arrêt dans malloc_error_break pour déboguer

Comment puis-je savoir quel objet ou quelle variable est concerné?

J'ai essayé de définir un point d'arrêt symbolique comme celui-ci mais cela ne s'arrête jamais:

entrez la description de l'image ici

openfrog
la source
1
Je résous ce problème en désactivant l'inspection safari. stackoverflow.com/a/43885754/6521116
Kris Roofe
Une des causes de ceci est une fonction / méthode qui est censée retourner un objet et qui atteint la fin de la fonction et ne renvoie rien.
Xofo

Réponses:

136

Définissez un point d'arrêt sur malloc_error_break () en ouvrant le navigateur de point d'arrêt (Affichage-> Navigateurs-> Afficher le navigateur de point d'arrêt ou ⌘7), en cliquant sur le bouton plus dans le coin inférieur gauche et en sélectionnant "Ajouter un point d'arrêt symbolique". Dans la fenêtre contextuelle qui apparaît, entrez malloc_error_breakdans le champ Symbole, puis cliquez sur Terminé.

EDIT: openfrog a ajouté une capture d'écran et a indiqué qu'il avait déjà essayé ces étapes sans succès après avoir publié ma réponse. Avec cette modification, je ne sais pas quoi dire. Je n'ai pas vu cela échouer moi-même, et en effet je garde toujours un point d'arrêt sur l'ensemble de malloc_error_break.

Andrew Madsen
la source
2
Cela a fonctionné pour moi (sans le module). La cause du problème pour moi était que j'avais UIImageun fichier sauvegardé et que j'écrasais le fichier avec une image différente. Cela a provoqué une erreur lorsque j'ai appelé UIImagePNGRepresentationl'image d'origine (pas lorsque le fichier a été réellement écrasé).
Robert
Je ne reçois pas de bouton plus dans le coin inférieur gauche de la ⌘7barre ... Peut-être que vous vouliez dire ⌘8?
ScottyBlades
@ScottyBlades devinant que le raccourci a changé. J'ai écrit cette réponse il y a 8 ans et 7 versions majeures de Xcode ...
Andrew Madsen
@AndrewMadsen Pas de soucis, il suffit de vérifier si cela a du sens de le modifier.
ScottyBlades
46

Dans votre capture d'écran, vous n'avez spécifié aucun module: essayez de paramétrer "libsystem_c.dylib"

entrez la description de l'image ici

J'ai fait ça, et ça marche: le point d'arrêt s'arrête ici (bien que le stacktrace surgisse souvent d'une obscure bibliothèque système ...)

Vinzzz
la source
7
On dirait que le nom du module est différent dans iOS, il est: libsystem_malloc.dylib. Breakpoint fonctionne pour moi sans spécifier de module.
Nestor
6

J'ai eu le même problème avec Xcode. J'ai suivi les étapes que vous avez données et cela n'a pas fonctionné. Je suis devenu fou parce que dans chaque forum que j'ai vu, tous les indices pour ce problème sont ceux que vous avez donnés. J'ai finalement vu que j'avais mis un espace après le malloc_error_break, je l'ai supprimé et maintenant ça marche. Un problème stupide mais si la solution ne fonctionne pas, assurez-vous de ne pas mettre d'espace avant et après le malloc_error_break.

J'espère que ce message vous aidera.

Sébastien
la source
4

J'avais donné des autorisations que je ne devrais pas avoir à écrire dans certains dossiers (en particulier / usr / bin /), et cela a causé le problème. Je l'ai corrigé en ouvrant l'Utilitaire de disque et en exécutant «Réparer les autorisations de disque» sur le disque dur Macintosh.

user3843991
la source
Merci, cela a réparé ma machine en panne.
Matt Fletcher du
2

Je le résous par un inspecteur de safari proche. Reportez-vous à mon message . J'ai également trouvé du son parfois lorsque j'exécute mon application pour tester, puis j'ouvre le safari avec l'inspecteur automatique, après cela, je fais une action dans mon application, puis ce problème s'est déclenché.

entrez la description de l'image ici

Kris Roofe
la source