有時它發生在你使用非託管代碼的項目,所以你不知道如何解決一個簡單的問題。在大多數情況下,調試器可以幫助我們達到根本目的,我只想知道xcode調試器的強大程度。因爲我使用了像OllyDbg這樣的一些asm調試器,這些爲我們提供了一個不。我選擇的斷點最多的是點擊事件或點擊事件的斷點。那麼有什麼辦法可以在xcode項目上放置類似的斷點嗎?有什麼辦法可以斷點按鈕touchUpInside的所有方法嗎?
4
A
回答
8
聽起來像你正在尋找一種方法來捕獲任何時間一個UIButton被挖掘。要做到這一點,我會設置一個符號斷點。在斷點導航器(⌘7),點擊加號在屏幕的底部,選擇添加符號斷點
在對話中,添加以下到符號領域:
-[UIControl sendAction:to:forEvent:]
這是多一點比你所要求的。它實際上會捕獲除了UIButton之外的大量事件的所有事件。不過,我敢打賭,你可以讓它滿足你的需求。現在運行該應用程序並點擊一個按鈕。當它遇到斷點時,調試器看起來會有點不同於你可能習慣看到的正常堆棧跟蹤,因爲你將在沒有源代碼匹配符號的地方碰到斷點。通過一些命令,您可以解密相當數量的數據。例如,請參閱下面的屏幕截圖。
下面是我做什麼,什麼一些,這意味着。首先要跳過(F6)到下一個命令(例如第12行)的開頭,以確保傳入變量的所有寄存器都已正確填充。從那裏開始,我開始在寄存器中尋找有趣的信息。在本例中,寄存器r15是調用對象(按鈕!),r14,r12和rbx是參數(第4-7行)。當寄存器中的值是一個指向對象的指針時,當你處於'正常'棧幀時,你可以'打印對象'。例如:
(lldb) register read r15
r15 = 0x00007fc6f4a24510
(lldb) po 0x00007fc6f4a24510
<UIButton: 0x7fc6f4a24510; frame = (0 0; 414 100); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fc6f4a247b0>>
(lldb) po [[(UIButton *)0x00007fc6f4a24510 titleLabel] text]
Done
相關問題
- 1. 有什麼辦法可以在類的所有方法上設置斷點?
- 2. 有沒有什麼辦法可以放大c#中的按鈕?
- 3. 有什麼辦法可以這樣嗎?
- 4. 有什麼辦法可以從父類調用子方法嗎?
- 5. 有沒有辦法用方法禁用所有按鈕?
- 6. 有什麼辦法可以將MediaWiki中的編輯按鈕分組嗎?
- 7. 有什麼辦法可以獲得tkinter菜單按鈕的信息嗎?
- 8. 有沒有什麼辦法可以在被測試的類中斷點?
- 9. 有什麼辦法可以訪問所有的android通知?
- 10. 有沒有什麼辦法可以知道一個按鈕沒有按下確定的時間點擊?
- 11. 有什麼辦法可以合併頁面上的所有畫廊嗎?
- 12. 有什麼辦法可以包含所有整數?
- 13. 有什麼辦法可以跳過GeoNear()中的一些文檔MongoDB方法嗎?
- 14. 有什麼辦法可以阻止在編譯時調用的方法嗎?
- 15. 有什麼辦法可以調用模板參數類的未知方法嗎?
- 16. 有什麼辦法可以緩存ASIFormDataRequest?
- 17. 有什麼辦法可以chroot linux filemanager?
- 18. 有沒有什麼辦法可以用離子聆聽鍵盤後退按鈕?
- 19. 有什麼辦法可以判斷UIPickerView是否在旋轉?
- 20. 有什麼辦法可以阻止http處理未知方法?
- 21. 有什麼辦法可以從PyQt或PySide自動完成方法和類嗎?
- 22. 有什麼辦法可以在ProcessBuilder中運行一個方法/函數嗎?
- 23. 有什麼辦法可以在java中實現'抽象類方法'嗎?
- 24. 有什麼辦法可以禁用任務內的windows.form.timer嗎?
- 25. 有什麼辦法可以讓wpf + wcf更快的工作嗎?
- 26. 有什麼辦法可以禁用UITextField的聽寫支持嗎?
- 27. 有什麼辦法可以解決RenderBody()的需求嗎?
- 28. 有什麼辦法可以指定os.path的平臺嗎?
- 29. 有什麼辦法可以檢測Java中的RTL語言嗎?
- 30. 有什麼辦法可以重定向smbclient的輸出嗎?
其他可能有用的東西。 Xcode的符號斷點也將與選擇器匹配。所以如果你想捕獲所有實現對foo:bar:baz:selector的響應的方法,你可以只指定選擇器名稱,而省略類和 - []。 –
此外,如果您嘗試調試代碼,但您沒有調試信息,則如果在函數的一開始停止,則打印參數更容易,然後使用lldb「註冊別名」$ arg1,$ arg2等,它指向用於將arg1,arg2等傳遞給函數的寄存器。這對任何使用寄存器傳遞參數的目標體系結構都適用,這是我們目前除32位英特爾之外的所有體系結構所做的。請注意,您必須在函數的開頭停止,以在參數插槽重用之前捕獲狀態。 –
酷!謝謝@Jimngger!這真的很方便。 :) – Daniel