67 votes

Xcode - scribble, guard edges et guard malloc

Quelqu'un peut-il expliquer ce que font ces options dans Xcode ?

  • Activer le gribouillage
  • Activer les bords de garde
  • Activer la garde Malloc

ce qu'ils sont et ce qu'ils font et quelle peut être leur utilité pour le débogage/les tests ?

Merci.

62voto

Joachim Isaksson Points 85969

De la documentation .

  • Active le scribble. Remplir la mémoire allouée avec 0xAA et la mémoire désallouée avec 0x55.
  • Activez les bordures de garde. Ajoutez des pages de garde avant et après les allocations importantes.
  • Activez Guard Malloc. Utilisez libgmalloc pour détecter les problèmes de mémoire courants tels que les dépassements de tampon et l'utilisation après la libération.

Scribble rendra évident le fait que vous utilisez un bloc mémoire après qu'il ait été libéré en écrasant toutes les données qui se trouvaient dans le bloc mémoire lors de sa libération.
Guard edges et Guard Malloc vous aideront à trouver les dépassements de mémoire et (jusqu'à un certain point) l'utilisation après la libération en protégeant les blocs de mémoire en lecture et en écriture pour que votre programme se plante de manière plus évidente en cas d'utilisation abusive de la mémoire.

0 votes

Je demande cela parce que parfois j'ai des plantages dans mes applications que j'essaie de déboguer, et Xcode 4 pointe vers " int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate") ; " comme source d'erreur. J'ai donc essayé de trouver des moyens pour qu'il pointe vers la bonne ligne d'erreur.

0 votes

@DigitalRobot Même si elles n'offrent pas une "protection" à 100%, s'il s'agit d'une erreur de mémoire, toutes les options ci-dessus, si elles sont activées, augmenteront la probabilité que votre programme se plante plus près de l'endroit où se trouve l'erreur réelle.

3 votes

Question secondaire : le choix de 0xAA et 0x55 est-il complètement arbitraire, ou y a-t-il une raison ?

6voto

Nuthatch Points 1553

Le lien "documentation" ci-dessus concerne Xcode en général, mais plus particulièrement RN-MallocOptions couvre ces options (et d'autres) en détail.

Jim Kubicek montre un bel exemple dans Déboguer la mémoire écrasée en Obj-C y compris l'importante question "Comment puis-je les activer dans Xcode ?" :

Ouvrez la fenêtre "Edit Scheme" et accédez à l'onglet "Diagnostics". Vous voudrez activer "Enable Scribble" et "Malloc Stack". ... en bref, "Enabled Scribble" fera en sorte que l'allocateur écrive 0xAA dans la mémoire nouvellement allouée et écrive 0x55 dans la mémoire désallouée. "Malloc Stack" enregistrera l'historique d'allocation et de libération de votre mémoire.

Si vous avez lu jusqu'ici, vous serez probablement intéressé par les notes techniques d'Apple :

0 votes

Cet article sur le débogage de la mémoire écrasée dans Obj-C est étonnant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X