2010-09-27 11 views
5

Sto eseguendo il debug di un'app Cocoa, che chiama le librerie di sistema. Ricevo i simboli di debug per il mio codice, ma non le librerie di sistema, il che mi impedisce di eseguire il debug. Come posso ottenere i simboli di debug per la libreria di sistema.Come si esegue il debug attraverso le librerie di sistema su OS X?

Sto usando gdb, compilando il 10.5 SDK su 10.6.4 (gcc 4.2).

Ecco lo stack-trace Mi piacerebbe ottenere i simboli per:

(gdb) bt 
#0 0x93713e43 in CFQSortArray() 
#1 0x936f4c49 in CFArraySortValues() 
#2 0x958f0bc0 in ColorSyncProfileCopyTagSignatures() 
#3 0x9591d218 in CMMProfile::Usable() 
#4 0x9591cb5d in DoValidateProfile() 
#5 0x9591cc75 in AppleCMMValidateProfile() 
#6 0x958f1e52 in ColorSyncProfileVerify() 
#7 0x91b13b88 in validateProfile() 
#8 0x91b13aed in CMSValidateProfile() 
#9 0x93b27f6c in CGCMSInterfaceValidateProfile() 
#10 0x93b27f4c in CGCMSUtilsValidateProfile() 
#11 0x93b27e4b in CGColorSpaceCreateICCBased() 
#12 0x93b27203 in create_generic_color_space() 
#13 0x93b26f92 in CGColorSpaceCreateWithIndex() 
#14 0x90228ad5 in +[NSColorSpace specialColorSpaceWithID:]() 
#15 0x90228a0c in +[NSColorSpace genericRGBColorSpace]() 
#16 0x9022881e in -[NSBitmapImageRep _bitmapImageRep_setColorSpaceName:]() 
#17 0x904f6e39 in -[NSBitmapImageRep initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:]() 
#18 0x902282ae in -[NSBitmapImageRep _initWithSharedBitmap:rect:]() 
#19 0x90227efe in -[NSImage _addRepresentationWithSharedKitWindow:rect:]() 
#20 0x90226d06 in +[NSImage _findSystemImageNamed:]() 
#21 0x90226a48 in +[NSImage imageNamed:]() 
#22 0x902268ea in -[NSCustomResource _loadImageWithName:]() 
#23 0x9022681e in -[NSCustomResource loadImageWithName:]() 
#24 0x90225d5f in -[NSCustomResource awakeAfterUsingCoder:]() 
#25 0x915a2208 in _decodeObjectBinary() 
#26 0x915a14e4 in _decodeObject() 
#27 0x9022556f in -[NSMenuItem initWithCoder:]() 
#28 0x915a21ec in _decodeObjectBinary() 
#29 0x915a2ff8 in -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]() 
#30 0x915a3665 in -[NSArray(NSArray) initWithCoder:]() 
#31 0x915a21ec in _decodeObjectBinary() 
#32 0x915a14e4 in _decodeObject() 
#33 0x90229ff0 in -[NSMenu initWithCoder:]() 
#34 0x915a21ec in _decodeObjectBinary() 
#35 0x915a2ff8 in -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]() 
#36 0x915a3665 in -[NSArray(NSArray) initWithCoder:]() 
#37 0x915a21ec in _decodeObjectBinary() 
#38 0x915a14e4 in _decodeObject() 
#39 0x9021ff29 in -[NSIBObjectData initWithCoder:]() 
#40 0x915a21ec in _decodeObjectBinary() 
#41 0x915a14e4 in _decodeObject() 
#42 0x9021f4a8 in loadNib() 
#43 0x9021eb5b in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:]() 
#44 0x9021e811 in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:]() 
+0

È meglio fare una domanda sul problema riscontrato che ti ha portato a cercare queste informazioni in primo luogo. –

+0

@Ben: Probabilmente non avrò risposta "quando sostituisco l'allocatore di memoria di Firefox su 32-bit solo Mac, perché ottengo questo segfault?", Anche se potessi rispondere, sarei molto grato :) –

+1

Untru :. Ho già pensato all'allineamento degli oggetti come a un possibile colpevole. –

risposta

0

dubito che si può trovare qualsiasi cosa, ma i nomi di collegamento dei simboli in librerie di sistema. Certamente nessuna informazione sul numero di riga e nessun codice sorgente (è un prodotto commerciale closed-source). Il meglio che puoi fare è seguire le istruzioni dell'assemblatore in queste funzioni.

È possibile utilizzare il comando gdbfinish da eseguire finché non viene restituito il frame dello stack selezionato. Fatelo più volte per tornare al codice dell'applicazione. Oppure solo next per le chiamate alle funzioni di libreria.

+0

Beh, il codice sorgente per molti di questi è disponibile online, quindi ho pensato che avrei potuto ottenere qualcosa. –

+0

Dovresti creare le tue versioni di debug di quelle :( –

+0

Come nota a margine, puoi dire a gdb di cercare da qualche altra parte simboli con "(gdb) set solib-absolute-prefix " ed è possibile impostare un percorso alternativo alla fonte alternativa con "(gdb) imposta il percorso sostitutivo ", se si fosse in grado di ottenere la specifica libreria in questione con i simboli ... –

Problemi correlati