シンボルを削除したCocoa/Objective-Cアプリケーションをデバッグする必要があります。私はgdbとObjective-Cに精通しています。通常、私はotoolやclass-dumpのようなツールを使って、デバッグをもっと簡単にするために必要なものを見つけます。たとえば、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ファイルには、メソッドIMPをアドレス位置にマップするために必要な情報のすべて*を含む__OBJCセグメントがあります。 gdbが必要とする「フープジャンプ」は必要ありません。gdb自身がこれを把握できるはずです。 –
これはOPがすでに示したバックトレースに表示されているものだけを表示します。シンボルテーブルがなければ、行番号、変数名などは得られません。フレームはシンボルがないC関数です - 確かに#16と#17は_start()とmain()です。 #7は--performSelector:内部用に使用されるいくつかのCF Gooberです。 – bbum