1

バインディングを行い、XCode を使用してアーカイブ用に構築したサードパーティ ライブラリがあります。C# Xamarin アプリで使用しています。それにもかかわらず、Xamarin Studio を介してデバッグする方法がないネイティブ クラッシュが発生しました。プロセスに gdb をアタッチしようとしましたが、次の警告が表示されます。

warning: Could not find object file "/var/folders/mf/w59_1t797k3cfrp7hdmncvt40000gn/T/tmp42fc77da.tmp/libCouchCocoa.a(CouchEmbeddedServer.o)" - no debug information available for "CouchEmbeddedServer.m".


warning: Could not find object file "/var/folders/mf/w59_1t797k3cfrp7hdmncvt40000gn/T/tmp42fc77da.tmp/libCouchCocoa.a(CouchTouchDBDatabase.o)" - no debug information available for "CouchTouchDBDatabase.m".

[...]

次に、SIGSEGV が発生したときに bt 関数を使用しますが、ライブラリで何が起こったのかについての情報はありません。これは警告に関連していると思います。

(gdb) continue
Continuing.

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000008
[Switching to process 98604 thread 0x28403]
0x0438509b in objc_msgSend ()
(gdb) bt
#0  0x0438509b in objc_msgSend ()
#1  0x112924f0 in ?? ()
#2  0x1714fdb0 in ?? ()
#3  0x17555a9c in ?? ()
#4  0x175557f6 in ?? ()
#5  0x17555200 in ?? ()
#6  0x17554c48 in ?? ()
#7  0x17554b4c in ?? ()
#8  0x17554af0 in ?? ()
#9  0x17554aac in ?? ()
#10 0x1718fb1c in ?? ()
#11 0x1718f6dc in ?? ()
#12 0x1718f5d8 in ?? ()
#13 0x0b6c0c8e in ?? ()
#14 0x000a3172 in mono_jit_runtime_invoke (method=0xca60dac, obj=0x10ec7490, params=0xb0974eec, exc=0xb0974ef4) at mini.c:5804
#15 0x0020840e in mono_runtime_invoke (method=0xca60dac, obj=0x10ec7490, params=0xb0974eec, exc=0xb0974ef4) at object.c:2790
#16 0x0020857c in mono_runtime_delegate_invoke (delegate=0x10ec7490, params=0xb0974eec, exc=0xb0974ef4) at object.c:3462
#17 0x002629b4 in mono_async_invoke [inlined] () at :626
#18 0x002629b4 in async_invoke_thread (data=0xc71f870) at threadpool.c:1443
#19 0x00268756 in start_wrapper_internal [inlined] () at :784
#20 0x00268756 in start_wrapper (data=0x1128e680) at threads.c:832
#21 0x0029a69a in thread_start_routine (args=0xfa46204) at wthreads.c:287
#22 0x00245540 in gc_start_thread (arg=0x112922a0) at sgen-gc.c:6280
#23 0x98a89ed9 in _pthread_start ()
#24 0x98a8d6de in thread_start ()
(gdb) 

gdb がサードパーティ ライブラリに関するデバッグ情報を見つけられるようにするには、サードパーティ ライブラリをどのようにビルドすればよいですか?

編集: p mono_pmip を使用して、シンボリック解除されたメソッド名を取得できましたが、これを行う必要がなく、デバッグ シンボルを持つ方法はありますか?

4

1 に答える 1

3

デバイスで gdb を使用すると、さらにうまくいく可能性があります。

これは、 fruitstrapを使用して実行できます(fruitstrap は Xamarin によって公式にサポートされていないことに注意してください。私が言えるのは、私自身で時々使用できるということだけです)。

シミュレーターでより難しい理由は、そこで JIT を使用するためです。これは、メモリ アドレスと関数名/行番号の間のマッピングがメモリ内にのみ存在し、gdb が理解できないことを意味します。デバイス用にビルドするときは、すべてを ARM アセンブリにAOT し、gdb が理解できる適切なデバッグ情報を作成します。

于 2013-05-06T21:12:22.150 に答える