我包含了iOS標籤,但是我在Core i7 MacBook Pro(x86-64,對吧?)的模擬器上運行,所以我認爲這並不重要。通用寄存器的內容是什麼?
我目前正在調試Flurry視頻廣告的崩潰。我有一個設置Objective-C異常的斷點。當斷點被打時,我在objc_msgSend
。這個callstack包含了私人Flurry和iOS方法的組合,沒有任何公開的,也沒有我寫的東西。調用從objc_msgSend
棧幀輸出register read
如下:
(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引用一個實例方法,據我所知,這個方法與這次崩潰無關。那是什麼?
- 有沒有其他信息可以從這些寄存器中剔除?