2009-08-24 4 views
1

Ich habe einen Fehler in meinem Objective-C-Programm, der den Rechner in einigen Bibliotheksmethoden zum Absturz bringt, und es sind alle Bibliotheksmethoden auf dem Stapel zu main (Which I habe nicht von dem einen berührt, den XCode mir gegeben hat). Also, ich habe ein kleines Rätsel.clevere Wege zum Aufspüren von Fehlern in Obj-C

Der Fehler Ich erhalte ist:

Program received signal: “EXC_BAD_ACCESS”. 

Nun, ich bin sicher, dass dies bedeutet, dass ich irgendwo etwas zu oft bin Loslassen, oder so ähnlich. Dies ist die objektive C-Version eines Seg-Fehlers, richtig?

Meine Frage ist: Da es nicht in meinem eigenen Code geschieht, gibt es einigen cleveren Weg nach unten von Tracking, was mir die Freigabe des Doppelten? oder ist code inspection die beste wette?

danke.

Antwort

2

EXC_BAD_ACCESS im Wesentlichen bedeutet, dass Sie versuchen, einen bestimmten Teil des Speichers auf unerwartete Weise zuzugreifen oder zu verwenden. Wenn Sie beispielsweise versuchen, eine Nachricht an eine Speicherreferenz zu senden, die kein gültiges Objekt mehr darstellt. Es ist anders als ein Segmentierungsfehler, aber verwandt.

Vorschläge zum Debuggen von zu oft freigegebenen Objekten finden Sie unter this related SO question. NSZombie wird Wunder für dich bewirken. Sobald Sie Snow Leopard (Sie bekommen es an diesem Freitag, richtig?) Nutzen Sie das Zombies-Instrument, um den Prozess zu vereinfachen, und verwenden Sie den Xcode Static Analyzer, um Ihnen zu finden, solche Fehler zur Kompilierzeit.

Sie auch: http://www.cocoadev.com/index.pl?DebuggingTechniques und this Apple Tech Note.

+1

Sie können auch EXC_BAD_ACCESS-Fehler erhalten, wenn Sie eine char * c-Zeichenfolge ungleich null haben und versuchen, sie so zu verwenden, als ob sie null-terminiert wäre. Das hat mich * für immer * aufgespürt. –

+0

Ah, ja, NSZombie, das hätte ich vergessen! Vielen Dank! –