1

这可能看起来有点倒退,但我在一个巨大的 iOS 应用程序中,并试图了解可视界面元素(视图、控件)在哪里调用代码。不幸的是,许多视图都是动态构建的,所以它不像只进入 Interface Builder 并查看 Target/Actions 和 IBOutlets 那样简单。

通常,人们使用断点的方法是提前在代码中的预定位置设置断点,然后等待它们被命中。

好吧,我想知道是否有可能以这种方式(可能通过 LLDB?)设置断点,它基本上说......“嘿,我不知道接下来会执行什么,但无论如何,在那里中断。 "

这对我弄清楚视图和控件在哪里输入代码非常有用。

4

2 回答 2

2

bneely 建议的方法是全面了解正在发生的事情。如果您想要一种简单的方法来快速获取一些代码并稍微了解所涉及的基类,您可以使用符号断点。

例如,假设我想获取一些 UIButton 事件回调的代码。我可以添加以下符号断点:'-[NSObject performSelector:withObject:withObject:]'。(是的两个withObjects)。这可能会在一些汇编代码中停止。幸运的是,选择器位于寄存器中,因此使用 gdb: info registers 或 lldb register read 应该显示选择器。然后就是 cmd+shift+o(快速打开),粘贴到选择器中并在(希望是单个)结果上按 Enter 键,或者根据上下文判断。

另一个有用的可能是:'-[UIControl sendActionsForControlEvents:]'

此外,查找 UI 代码的一个好方法是在项目中搜索 UI 控件显示的文本。

如果一切都失败了,希望代码库的贡献者遵循良好的命名约定并很好地组织文件。

编辑:

如果选择器一开始没有出现,而是你得到类似“_controlTouchBegan:withEvent”的东西,那么只需继续,直到你点击相关的选择器。

于 2013-09-25T22:06:11.867 回答
2

您可以使用 Instruments 应用程序。在 Xcode 中,选择 Product > Profile,然后在 iOS Simulator > CPU options 下选择 Time Profiler。按配置文件按钮。让应用程序执行您想要分析的任何操作,然后按 Instruments 窗口左上角的 Stop 按钮。您将获得调用树的折叠视图,您可以展开该视图(提示:按住 option-click 在显示三角形上一次展开所有符号的后代)并浏览以遵循执行路径。

于 2013-09-25T21:37:40.367 回答