是否可以使用断点来发现下一个执行的代码

时间:2013-09-25 21:30:34

标签: ios objective-c

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

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

好吧,我想知道是否有可能以某种方式设置一个断点(可能是通过LLDB?),基本上说......“嘿,我不知道接下来要执行什么,但无论如何也就是说,打破那里。

这对我来说非常有用,可以确定视图和控件输入代码的位置。

2 个答案:

答案 0 :(得分:2)

您可以使用Instruments应用程序。从Xcode,选择产品>配置文件,然后选择iOS模拟器下的Time Profiler> CPU选项。按配置文件按钮。让应用程序执行您想要分析的任何内容,然后按“仪器”窗口左上角的“停止”按钮。您将获得调用树的折叠视图,您可以展开它(提示:选择 - 单击显示三角形以立即展开所有符号的后代)并浏览以遵循执行路径。

答案 1 :(得分:2)

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

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

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

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

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

编辑:

如果选择器最初没有显示,而是你得到类似'_controlTouchBegan:withEvent'的内容,那么只需继续直到你点击相关的选择器。