I punti di interruzione vengono disattivati ​​in Xcode: EXC_BAD_ACCESS quando NSZombieEnabled == SI

StackOverflow https://stackoverflow.com/questions/1393788

Domanda

  

Questa domanda è di gran lunga superata, come è stato chiesto di XCode 3. Si prega di non prendere in considerazione utile per XCode 4+. =)


La mia app si blocca a (apparentemente) eventi casuali. Così, ho voluto aggiungere NSZombieEnabled per eseguire il debug la mia applicazione iPhone. Ho clonato il mio obiettivo e impostare il suo Info.plist per la stessa destinazione originale e impostare NSZombieEnabled su YES.

Una volta che ho eseguito l'applicazione, si blocca con una traccia dello stack di ...

#0  0x3025db0c in ___forwarding___ ()
#1  0x30239db2 in __forwarding_prep_0___ ()
#2  0x304f5105 in NSPopAutoreleasePool ()
#3  0x308ee452 in _UIApplicationHandleEvent ()
#4  0x32031425 in PurpleEventCallback ()
#5  0x30235253 in CFRunLoopRunSpecific ()
#6  0x302343c8 in CFRunLoopRunInMode ()
#7  0x308e6209 in -[UIApplication _run] ()
#8  0x308eef81 in UIApplicationMain ()
#9  0x000023ef in main (argc=1, argv=0xbffff0bc) at /Users/tomen/Documents/MIB-Sprint4/main.m:26

Ciò avviene solo quando NSZombieEnabled è impostato su YES. Se non è impostata, l'applicazione funziona solo (e si blocca in tempi diversi)

ho voluto aggiungere punti di interruzione come "- [_ NSZombie methodSignatureForSelector:]" e altri, ma ottengono disattivato durante il debug. Ho provato entrambi i modi con i "simboli di carico pigramente" acceso e spento.

Inoltre ho cercato di impostare il mio file ~ / .gdbinit a

fb -[NSException raise]
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

#define NSZombies
# this will give you help messages.  Set to NO to turn them off.
set env MallocHelp=YES
# might also be set in launch arguments.
set env NSZombieEnabled=YES
set env NSDeallocateZombies=NO
set env MallocCheckHeapEach=100000
set env MallocCheckHeapStart=100000
set env MallocScribble=YES
set env MallocGuardEdges=YES
set env MallocCheckHeapAbort=1

set env CFZombie 5

fb -[_NSZombie init]
fb -[_NSZombie retainCount]
fb -[_NSZombie retain]
fb -[_NSZombie release]
fb -[_NSZombie autorelease]
fb -[_NSZombie methodSignatureForSelector:]
fb -[_NSZombie respondsToSelector:]
fb -[_NSZombie forwardInvocation:]
fb -[_NSZombie class]
fb -[_NSZombie dealloc]

fb szone_error

che cede questo risultato nella console:

The Debugger has exited with status 0.
[Session started at 2009-09-08 13:48:40 +0200.]
Loading program into debugger…
GNU gdb 6.3.50-20050815 (Apple version gdb-966) (Tue Mar 10 02:43:13 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin".warning: Unable to read symbols for "/System/Library/Frameworks/UIKit.framework/UIKit" (file not found).
warning: Unable to read symbols from "UIKit" (not yet mapped into memory).
warning: Unable to read symbols for "/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics" (file not found).
warning: Unable to read symbols from "CoreGraphics" (not yet mapped into memory).
Pending breakpoint 1 - "-[NSException raise]" resolved
Pending breakpoint 2 - "-[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]" resolved
Pending breakpoint 3 - "-[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]" resolved
Pending breakpoint 14 - "szone_error" resolved
Program loaded.
sharedlibrary apply-load-rules all
Attaching to program: `/Users/tomen/Library/Application Support/iPhone Simulator/User/Applications/F77D9D82-0B34-4B8D-9076-AE883A2714F4/MIB.app/MIB', process 279.
Re-enabling shared library breakpoint 1
Re-enabling shared library breakpoint 2
Re-enabling shared library breakpoint 3
Re-enabling shared library breakpoint 14
Re-enabling shared library breakpoint 16
Re-enabling shared library breakpoint 17
Re-enabling shared library breakpoint 18
warning: Couldn't raise load state for requested objfile: "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation" for breakpoint 1/

warning: Couldn't raise load state for requested objfile: "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" for breakpoint 2/

warning: Couldn't raise load state for requested objfile: "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation" for breakpoint 3/

Perché i miei punti di interruzione vengono disattivati?

È stato utile?

Soluzione

Ho provato questo approccio anche con gli stessi risultati. La mia comprensione è che i punti di interruzione NSZombie non sono più validi in Leopard e Snow Leopard.

Alcune alternative:

1) Dump registro EAX su obj_msg_send. Non ho provato personalmente questo, ma ho trovato molti post sul tema: Come eseguire il debug EXC_BAD_ACCESS che si verifica solo sul bersaglio immissione in un applicazione per iPhone?

2) Utilizzare informazioni malloc-storia. Funziona bene nel simulatore, ma ho avuto poca fortuna per avere i log off del dispositivo Finding liberato casi deallocata di oggetti

3) Probabilmente la cosa migliore da fare è eseguire la vostra applicazione in strumenti. Si noti che la modalità NSZombie non è disponibile sul dispositivo. Questo può essere di aiuto: iPhone di debug di memoria NSZombie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top