iOS libsystem_c.dylib strdup pérdida de memory NSZombie no funciona

Ayúdame a rastrear una pérdida de memory de iOS. ¡Gracias!

Estoy usando xCode 4.0.1 y traté de activar NSZombie para rastrear una pérdida de memory, pero parece que no funciona como antes, con xCode 3.x

No puedo descubrir de dónde proviene la pérdida de memory, ya que Instruments señala esto:

Objeto filtrado -> GeneralBlock-32 Dirección -> 0x4c8600 Tamaño -> 32 bytes Biblioteca responsable -> libsystem_c.dylib Marco / llamante responsable -> strup

En este punto, no sé si utilizo Instruments con NSZombie de la manera correcta con xCode 4, ya que no muestra la opción NSZombie cuando hago clic en "i" para get más información, debajo de la opción izquierda Fugas .

OBSERVACIÓN : Mi aplicación de iPhone reproduce una transmisión en vivo mms / wma y también files de audio wma con una cantidad de time finita. La filtración solo ocurre con un file wma finito, pero funciona perfectamente cuando estoy reproduciendo desde una fuente transmitida, sin time de finalización.

Primero, ese es un bloque malloc , no un object. Los zombis no funcionarán (y tampoco habrían funcionado en versiones anteriores).

¿Cuántas veces se produce esa filtración? ¿Una vez? No te preocupes por eso. ¿Una vez por transmisión? archive un error: no está en su código de lo que ha publicado hasta ahora (a less que su código llame a strdup , lo cual es ciertamente posible pero atípico en la mayoría de las aplicaciones de iOS que no están haciendo un uso intensivo de bibliotecas de terceros). . ¿eres tú?)

En cualquier caso, a less que se filtre 100s y 100s de 32 bytes de asignaciones a lo largo del time de ejecución de su aplicación, no se preocupe por ello (pero sí presente un error).

Como dijo Valkio, puede tomar el rastro de stack de la asignación de gdb (o de Instrumentos) directamente.

Puede ver dónde se asignó si hace esto:

  1. Vaya a Producto -> Editar esquema -> Ejecutar (depurar) -> Argumentos.
  2. Agregue esto a las variables de entorno: MallocStackLoggingNoCompact
  3. Establecerlo en
  4. Corre y deja que se cuelgue.
  5. escriba en la console (gdb) info malloc 0x4c8600 o lo que sea la dirección.