web-dev-qa-db-fra.com

Est-il possible de déboguer "Terminé en raison d'une erreur de mémoire"?

À un certain point (cohérent) lorsque mon application est en cours d'exécution, je reçois systématiquement le message d'erreur xcode

Terminé en raison d'une erreur de mémoire.

Je ne trouve pas le code à l'origine de l'erreur, mais je peux savoir quel code est proche de l'erreur (à l'aide de points d'arrêt).

L’erreur est provoquée directement après le retour d’une certaine cellule lors de l’implémentation du logiciel.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewDataSource méthode déléguée. Je peux confirmer qu'il renvoie un UITableViewCell valide, mais je pense qu'expliquer et publier cette méthode serait une perte de temps. Cependant, je soupçonne que cela pourrait être causé par une allocation de mémoire rapide et massive.

Cela dit certainement Terminated due to memory error, pas de pression de la mémoire.

Je voudrais savoir ce que le message signifie vraiment. De plus, y a-t-il un moyen de déboguer ce message? Aucun rapport d'incident n'est généré.

J'utilise ARC et iOS 7.

73
Santa Claus

J'avais cette erreur et je ne pouvais pas comprendre ce qui n'allait pas.

Après quelques recherches, j'ai découvert que j'avais oublié de désactiver les zombies.

Pour désactiver, procédez comme suit:

Select edit scheme

Deselect "Enable Zombie Objects

52
zirinisp

J'étais confronté au même problème. ("Terminé en raison d'une erreur de mémoire") J'avais essayé toutes les réponses précédentes mais rien ne fonctionnait pour moi. Ensuite, je débogue mon code et trouve une boucle for en cours d'exécution pour un temps infini avec l'allocation de mémoire à un tableau avec une valeur nulle à chaque fois.

Merci.

9
maanvender singh

J'ai eu exactement le même problème. Je pensais que mon programme avait une fuite de mémoire ou utilisait trop de mémoire. J'utilise des instruments et j'utilise le profil d'allocation et le programme fonctionne bien. De plus, j'ai exécuté le programme par périphérique assez longtemps, et cela fonctionne également très bien.

J'utilise aussi l'iPad de 3e génération pour le débogage, cela peut être causé par la lenteur du périphérique ou du bogue, il semble qu'il s'agisse simplement d'un problème Xcode et d'un problème Xcode. Pas le problème de fuite de mémoire ou d'allocation.

Si vous vous en assurez avec des instruments et l'application en cours d'exécution sur l'appareil lui-même et de travailler

5
Tomohisa Takaoka

J'utilisais Tesseract pour l'OCR et lorsque mon texte cible a été numérisé, un fichier GIF était censé être lu. Lorsque le GIF a commencé à jouer, il y avait une pointe de mémoire, de 70 à 80 Mo à 450 Mo. Le problème était que GIF prenait trop de mémoire, l'application se bloquait et Xcode montrait ce message. J'ai donc supprimé l'image concernée de la vue d'ensemble du ViewController.

imageView.removeFromSuperview

Après cela, l'application atteindrait toujours 450 Mo, mais serait immédiatement libérée et descendrait à 40 Mo.

4
Yash Tamakuwala

Modifiez le schéma. Sous Diagnostics, vous trouverez plusieurs options pour protéger les allocations. Reportez-vous à la documentation pour plus de détails .

La question est: dit-il vraiment "terminé en raison d'une erreur de mémoire" et non "pression"? Enregistrez les instruments si votre application manque de mémoire, si l'application semble manquer de mémoire, c'est sur quoi vous devriez vous concentrer, quel que soit le message exact.

2
LearnCocos2D

Redémarrer l'appareil a fonctionné pour moi. Le message "Terminé en raison d'une erreur de mémoire" a cessé de s'afficher.

1
Ofir Malachi