在Mac OS X和iOS模擬器(均爲x86)中,我們可以使用內聯彙編中的int3
指令將其捕獲到調試器(LLDB)。這很好,因爲它陷入了一個特定的代碼行,但我們可以通過在調試器中點擊繼續來立即繼續。如何陷入調試器並繼續iOS硬件?
有沒有辦法在iOS硬件上做到這一點?
An answer to an older question提及raise(SIGINT)
據我所見(從檢查signal.h
)不存在。另一個答案提到trap
彙編指令,這會導致構建錯誤(「無法識別的指令助記符」)。同樣無法識別的是BKPT
彙編指令mentioned in ARM documentation。
我試過__builtin_trap()
這差不多就是我想要的,但是不允許我繼續。除非我用jump +1
或register write pc `$pc+8\`
手動前進指令指針,否則我會一直點擊它,這比繼續下去要方便得多。
我正在爲使用Xcode 7.3.1的32位和64位設備的iOS 9構建。任何幫助表示讚賞!
downvoter,想解釋一下嗎? – Luke
我想他downvoted你的問題,因爲signal()和SIGINT都是標準C的一部分。http://opensource.apple.com//source/xnu/xnu-1456.1.26/bsd/sys/signal.h – diegog
raise (SIGINT)可以工作,但並不總是可靠的,有一段時間它會稍後停下來,並且您需要走線程樹以查找斷點的位置。我曾經使用這個解決方案,然後刪除。後來我發現ASSERT應該不再繼續下去,你應該面對它們而不是無視它們,爲什麼你想斷言呢? –