views:

54

answers:

2

I'm debugging a Cocoa app, which calls the system libraries. I get debug symbols for my own code, but not the system libraries, which stops me debugging any further. How can I get debug symbols for the system library.

I'm using gdb, compiling against the 10.5 SDK on 10.6.4 (gcc 4.2).

Here is the stack-trace I'd like to get symbols for:

(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:] ()
A: 

I doubt you'd find anything but link symbol names in system libraries. Certainly no line number info, and no source code (it's a closed-source commercial product). The best you can do is step through the assembler instructions in these functions.

You can use gdb finish command to run until selected stack frame returns. Do that several times to return to your application code. Or just next your way over library function calls.

Nikolai N Fetissov
Well, the source code for lots of it is available online, so I thought I'd be able to get something.
Paul Biggar
You'd have to build your own debug versions of those :(
Nikolai N Fetissov
As a side note, you can tell gdb to look somewhere else for symbols with "(gdb) set solib-absolute-prefix <path/to/libs>", and you can set a substitute path to alternate source with "(gdb) set substitute-path <from> <to>", if you were able to get the specific library in question with symbols...
Aaron H.
@Aaron, yes, that too. Thanks.
Nikolai N Fetissov
+1  A: 

As described in this apple TechNote, you want to set DYLD_IMAGE_SUFFIX to _debug.

http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html

there are further problems then (not having the right version on the right system) which are hard to overcome, so I haven't tested this.

Paul Biggar