gpt4 book ai didi

ios - 有没有办法断点所有按钮的 touchUpInside 方法?

转载 作者:可可西里 更新时间:2023-11-01 03:38:04 25 4
gpt4 key购买 nike

有时,当您的项目包含非常不受管理的代码时,您无法弄清楚如何解决一个简单的问题,就会发生这种情况。在大多数情况下,调试器帮助我们到达根点开始,我只是想知道 xcode 调试器有多强大。当我使用一些像 OllyDbg 这样的 asm 调试器时,这些为我们提供了一个否定。我使用最多的断点选项是点击事件或点击事件的断点。那么有什么办法可以在 xcode 项目上放置类似的断点吗?

最佳答案

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

enter image description here

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

-[UIControl sendAction:to:forEvent:]

enter image description here

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

enter image description here

这是我所做的,以及其中的一些含义。第一件事是跳过 (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

关于ios - 有没有办法断点所有按钮的 touchUpInside 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com