iOSタグを入れましたが、Core i7 MacBook Pro(x86-64ですよね?)のシミュレーターで動かしているので、大したことないと思います。
現在、Flurry の動画広告のクラッシュをデバッグしています。Objective-C の例外にブレークポイントを設定しています。ブレークポイントに到達すると、私はobjc_msgSend
. コールスタックには、Flurry と iOS のプライベート メソッドが混在しており、公開されているものも、私が書いたものもありません。スタック フレームregister read
から 呼び出すと、次のように出力されます。objc_msgSend
(lldb) register read
General Purpose Registers:
eax = 0x1ac082d0
ebx = 0x009600b5 "spaceWillDismiss:interstitial:"
ecx = 0x03e2cddb "makeKeyAndVisible"
edx = 0x0000003f
edi = 0x0097c6f3 "removeWindow"
esi = 0x00781e65 App`-[FlurryAdViewController removeWindow] + 12
ebp = 0xbfffd608
esp = 0xbfffd5e8
ss = 0x00000023
eflags = 0x00010202 App`-[FeedTableCell setupVisibleCommentAndLike] + 1778 at FeedTableCell.m:424
eip = 0x049bd09b libobjc.A.dylib`objc_msgSend + 15
cs = 0x0000001b
ds = 0x00000023
es = 0x00000023
fs = 0x00000000
gs = 0x0000000f
この出力についていくつか質問があります。
- $ebx にはクラッシュの原因となったセレクターが含まれており、$edi は最後に実行されたメソッドであると想定しました。そうですか?
- $eip はクラッシュした場所です。それは通常そうですか?
- $eflags は、私が知る限り、このクラッシュとは何の関係もないインスタンス メソッドを参照しています。それは何ですか?
- これらのレジスタからこじ開けることができる他の情報はありますか?