在Objective C a Trace Trace中分析代码path?

TraceGL是一个非常整洁的项目,它允许JS程序员在Javascript中跟踪代码path。 它看起来像这样:

在这里输入图像说明

我想为Objective C构build类似的东西。我知道运行时已经使追踪方法调用变得相当容易,但是如何追踪控制stream呢? 例如,在上面的屏幕截图中,未执行的代码path显示为红色突出显示。 Objective C / Xcode工作stream程中实现类似的最好方法是什么?

到目前为止,最好的方法是编写一个预处理程序,在将代码发送到编译器之前将代码注入临时源文件。 任何人有更好的主意?

不完全是Objective C和XCode的答案。

对于C ++代码,有一个工业质量代码覆盖工具BullseyeCoverage

  • function覆盖给你一个快速的概述和条件/决策覆盖给你高精度
  • 使用C ++和C编写的所有东西,包括系统级和内核模式

如果你想自己发明/写这种工具,我build议看一下(评估)一些现有的工具,解决相同的任务,以便你不会错过一个关键的function

基本上有两类这样的工具

  • 工作在二进制级别, 仪器字节码 ,库入口点等
  • 在源代码级工作, 仪器源代码在去编译器之前

该工具的目的是插入到调用运行时的代码调用中,该调用运行时收集运行时统计信息以供进一步处理。

基本通话

  • 时间戳,线程ID,源代码地址, 进入
  • 时间戳,线程ID,源代码地址, 离开

源代码地址取决于您所在的粒度。它可以是函数名称,也可以是源文件和行号。

收集的性能数据可能相当庞大,因此通常会将其总结起来,并且不会捕获整个调用堆栈。 检测性能瓶颈通常是足够详细的。

另一个缺点是捕获详细的性能数据,尤其是在具有多次命中的代码点中会显着减慢应用程序的速度。

如果你想完整的历史logging,然后捕捉包括时间戳和线程标识符的完整跟踪,你将能够在知道每个enter都有相应的leave后重新创build调用栈。

为了保证这种配对,代码工具必须插入exception处理调用,以确保即使该函数抛出exception(什么是“exception”以及如何尝试 – 最终依赖于语言和操作系统平台)。

获取所有必要的技巧和技巧, 评估一些工具,并看看他们的仪器风格

顺便说一句,总的来说,要做的工作还有很多,为了获得正确的结果,我个人想了两次以上,结果是什么,成本是多less。

作为一个想玩的话题,我强烈build议。 我创build了这样一个工具,用于对在C ++源代码级别和Java二进制级别上运行的Java MIDP应用程序进行故障诊断,这在我们需要的时候非常有用。

我想Xcode的静态分析器发现的问题的可视化器非常接近这个 – 尽pipe这只会给你一个像内存泄漏这样的特定问题的调用path。

在Xcode中尝试“产品>分析” ,select任何给定项目上的任何问题,然后单击代码编辑器中的蓝色箭头查看。

在这里输入图像说明