2

サードパーティのライブラリを使用するiPhoneアプリを作成しました。このライブラリを正常にクロスコンパイルし、すべてがスムーズに機能します。ただし、アプリケーションをデバッグする場合は、ライブラリもデバッグできるのが理にかなっています。そこで、デバッグ情報を含む外部ライブラリもコンパイルしました(gccオプション-ggdbを使用)。しかし、デバッグしたいときは正しいシンボル名を取得しますが、位置は常に間違っている/極端に奇妙です(locale_facets.tcc:2505またはiostream:76)。たとえば、スタックトレースは次のようになります。

#0  0x000045e8 in zorba::serialization::SerializeBaseClass::SerializeBaseClass () at iostream:76
#1  0x0001d990 in zorba::RCObject::RCObject () at iostream:76
#2  0x00025187 in zorba::xqpStringStore::xqpStringStore () at iostream:76
#3  0x000719e4 in zorba::String::String () at locale_facets.tcc:2505
#4  0x00030513 in iphone::iLabelModule::getURI (this=0x533f710) at /Users/sausalito/eth/izorba/sandbox/ilabel.cpp:19
#5  0x00356766 in zorba::static_context::bind_external_module () at locale_facets.tcc:2505
#6  0x0006139d in zorba::StaticContextImpl::registerModule () at locale_facets.tcc:2505
#7  0x000333e5 in -[ZorbaCaller init] (self=0x53405c0, _cmd=0x95583398) at /Users/sausalito/eth/izorba/sandbox/ZorbaCaller.mm:61
#8  0x00033180 in +[ZorbaCaller instance] (self=0x11dc2bc, _cmd=0x93679591) at /Users/sausalito/eth/izorba/sandbox/ZorbaCaller.mm:37
#9  0x0003d998 in -[testOne execute:] (self=0x530d560, _cmd=0x9366b126, sender=0x5121da0) at /Users/sausalito/eth/izorba/sandbox/generator/testOne.mm:13
#10 0x01a21405 in -[UIApplication sendAction:to:from:forEvent:] ()
#11 0x01a84b4e in -[UIControl sendAction:to:forEvent:] ()
#12 0x01a86d6f in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#13 0x01a85abb in -[UIControl touchesEnded:withEvent:] ()
#14 0x01a3addf in -[UIWindow _sendTouchesForEvent:] ()
#15 0x01a247c8 in -[UIApplication sendEvent:] ()
#16 0x01a2b061 in _UIApplicationHandleEvent ()
#17 0x03b6fd59 in PurpleEventCallback ()
#18 0x034a8b80 in CFRunLoopRunSpecific ()
#19 0x034a7c48 in CFRunLoopRunInMode ()
#20 0x03b6e615 in GSEventRunModal ()
#21 0x03b6e6da in GSEventRun ()
#22 0x01a2bfaf in UIApplicationMain ()
#23 0x0002dd7e in main (argc=1, argv=0xbffff044) at /Users/sausalito/eth/izorba/sandbox/main.m:16

これらの間違った場所がどこから来ているのか、誰かが考えていますか?

4

3 に答える 3

1

たとえば、デバッグ時にインライン化が問題になるのを見てきました。gcc 最適化 (-O0 または -O1) をオフにする (または少なくとも削減する) と役立ちました。あなたの場合も試してみる価値があるかもしれません。また、デバッグ情報の形式にはさまざまな種類があることに注意してください。ライブラリをコンパイルする gcc に -gdwarf-2 を渡すこともできます。(もちろん、Xcode で使用するデバッグ形式にも依存します)。

于 2010-04-13T12:44:33.037 に答える
1

サードパーティのライブラリは C++ のようです。テンプレートを使用していますか?その場合、コードはテンプレート引数に基づいてコンパイル時に生成されます。この場合、ソースはディスク上に存在せず、コンパイラがコンパイルした実際のコードを表示したり、正確な行番号を提供したりすることは不可能です。

于 2010-04-13T16:13:01.427 に答える
1

完全な答えはありませんが、バックトレースの取得に問題がある場合は、最も近いものを見つけるか、何かがクラッシュするまで別の機能を実行します。

たとえば、/Users/sausalito/eth/izorba/sandbox/ZorbaCaller.mm:61 は開始するのに適しているように見えます。もう少し深く、それはまだソースコードにあるようです:

iphone::iLabelModule::getURI (this=0x533f710) at /Users/sausalito/eth/izorba/sandbox/ilabel.cpp:19
于 2010-04-10T23:32:29.677 に答える