我必須調試剝離了符號的Cocoa/Objective-C應用程序。我非常精通gdb和Objective-C。通常情況下,我使用類似otool或class-dump的工具來找出我需要使調試更容易一些。例如,類轉儲可以很容易地知道在運行時何處存在某些方法。gdb Objective-C無符號表
我的問題是:我可以「幫助」gdb在運行時在回溯時提供更好的符號信息嗎?在下面的回溯中,我知道(使用類轉儲)所有標記爲「??」的方法是。如果我能讓gdb爲我做這件事,那將是非常好的。
謝謝!
(gdb) bt
#0 0x960de54e in -[NSPersistentUIManager init]()
#1 0x960de489 in __PersistentUIManager_block_invoke_1()
#2 0x9abd0693 in _NSFaultInObject()
#3 0x960ad800 in +[NSPersistentUIManager sharedManager]()
#4 0x961aefac in -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:]()
#5 0x961aeefd in -[NSWindow orderWindow:relativeTo:]()
#6 0x96238acc in -[NSWindow orderFront:]()
#7 0x0000a032 in ??()
#8 0x9154bdaa in -[NSObject performSelector:]()
#9 0x9154bd27 in -[NSSet makeObjectsPerformSelector:]()
#10 0x960c16a7 in -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:]()
#11 0x960b744d in loadNib()
#12 0x960b6834 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:]()
#13 0x960b673e in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:]()
#14 0x960b6672 in +[NSBundle(NSNibLoading) loadNibNamed:owner:]()
#15 0x9633d6c7 in NSApplicationMain()
#16 0x00002cc6 in ??()
#17 0x00002bed in ??()
感謝您的評論。在Mach_O文件中有一個__OBJC段,其中包含將方法IMP映射到地址位置所需的全部*信息。應該不需要進行任何「籃筐跳躍」,這是C. gdb所需要的,它應該能夠自行計算出來。 –
它只會顯示OP已經顯示的回溯中顯示的內容;沒有符號表,你不會得到行號,變量名等....幀最有可能是沒有符號的C函數 - 當然#16和#17是_start()和main()。 #7可能是一些用於-performSelector:內部的CF goober。 – bbum