有没有办法断开所有按钮touchUpInside方法?

时间:2016-01-09 03:13:20

标签: ios objective-c xcode debugging lldb

有时,当您使用非托管代码获得项目时会发生这种情况,因此您无法弄清楚如何解决一个简单的问题。在大多数情况下,调试器帮助我们从根本上开始,我只是想知道xcode调试器有多强大。因为我使用了一些像OllyDbg这样的asm调试器,这些为我们提供了一个号码。断点的选项我使用的最多是点击事件或点击事件的断点。那么有没有办法在xcode项目上设置类似的断点?

2 个答案:

答案 0 :(得分:13)

听起来您正在寻找一种方法来捕获任何时间来点击UIButton。为此,我将设置一个符号断点。在断点导航器(⌘7)中,单击屏幕底部的加号,然后选择添加符号断点

enter image description here

在对话框中,将以下内容添加到符号字段:

-[UIControl sendAction:to:forEvent:]

enter image description here

这比你要求的要多一点。除了UIButtons之外,它实际上会从很多东西中捕获所有事件。但是,我敢打赌,你可以让它满足你的需求。现在运行应用程序并点按一个按钮。当它到达断点时,调试器看起来与您可能习惯看到的正常堆栈跟踪略有不同,因为您将在没有源匹配符号的位置处遇到断点。使用一些命令,您可以破译相当数量的命令。例如,请参见下面的屏幕截图。

enter image description here

这就是我所做的,以及其中的一些含义。第一件事是跳过(F6)到下一个命令的开头(例如第12行),以确保正确填充传入变量的所有寄存器。从那里开始,我开始在寄存器中挖掘有趣的信息。在这个例子中,寄存器r15是调用对象(按钮!),r14,r12和rbx是参数(第4 - 7行)。当寄存器中的值是指向对象的指针时,您可以打印对象'就像你在正常情况下一样。的StackFrame。 e.g:

(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 :(得分:-1)

  1. 转到“显示导航器断点”选项。

  2. 通过单击“ +”按钮添加符号断点。

  3. 在符号文本字段中写入“-[UIControl sendAction:to:forEvent:]”,然后单击Enter。

就这样:

相关问题