2010-09-27 12 views
5

Je débogue une application Cocoa, qui appelle les bibliothèques système. Je reçois des symboles de débogage pour mon propre code, mais pas les bibliothèques système, ce qui m'empêche de déboguer davantage. Comment puis-je obtenir des symboles de débogage pour la bibliothèque du système.Comment puis-je déboguer à travers les bibliothèques système sur OS X?

J'utilise gdb, compilant le SDK 10.5 sur 10.6.4 (gcc 4.2).

Voici la pile trace Je voudrais obtenir des symboles pour:

(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

Vous feriez mieux de poser une question sur le problème que vous rencontrez qui vous a amené à chercher cette information en premier lieu. –

+0

@Ben: Il est peu probable que j'obtienne une réponse pour "quand remplacer l'allocateur de mémoire de Firefox sur un Mac 32 bits seulement, pourquoi ai-je cette erreur de segmentation?", Mais si vous pouviez répondre, je vous en serais très reconnaissant :) –

+1

Untru :. Je pensais déjà à l'alignement des objets comme un coupable possible. –

Répondre

0

Je doute que vous pouvez trouver quoi que ce soit, mais les noms de symboles de lien dans les bibliothèques du système. Certainement pas d'info de numéro de ligne, et pas de code source (c'est un produit commercial à code source fermé). Le mieux que vous puissiez faire est de parcourir les instructions de l'assembleur dans ces fonctions.

Vous pouvez utiliser la commande gdbfinish pour exécuter jusqu'à ce que les trames de la pile sélectionnées soient renvoyées. Faites cela plusieurs fois pour revenir à votre code d'application. Ou juste next votre chemin sur les appels de fonction de la bibliothèque.

+0

Eh bien, le code source pour beaucoup d'entre eux est disponible en ligne, alors j'ai pensé que je serais en mesure d'obtenir quelque chose. –

+0

Vous devriez construire vos propres versions de débogage de celles-ci :( –

+0

En note, vous pouvez dire à gdb de chercher ailleurs des symboles avec "(gdb) set solib-absolute-prefix " , et vous pouvez définir un chemin de substitution à la source alternative avec "(gdb) définir substitut-path ", si vous étiez en mesure d'obtenir la bibliothèque spécifique en question avec des symboles ... –