Reveal Debug

不修改项目文件集成

前面讲解了如何将Reveal集成到项目中,但是以上两种方法无论是动态框架还是静态库都需要修改工程,但如果修改了工程文件,那么所有参与项目的开发人员都需要装Reveal,这种做法是相当不友好的,所以接下来介绍一种不修改任何工程文件的方法。


环境搭建

  • 1.在当前的用户目录下新建一个.lldbinit,这样lldb每次启动时都会加载这个文件
  • 2.在.lldbinit文件中输入如下内容创建的四个命令:
command alias reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS‐Libraries/libReveal.dylib", 0x2);

command alias reveal_load_dev expr (void*)dlopen([(NSString*)[[(NSBundle*)NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2);

command alias reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];

command alias reveal_stop expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStop" object:nil];
  • 3.说明:
    • 1.reveal_load_sim:这个命令只在iOS模拟器上有效,它从Reveal.app应用程序中找到并加载libReveal.dylib文件

      注意:在此处.lldbinit中查找的libReveal.dylib文件是将Reveal.app放在/Applications/路径下(默认)的情景下进行的,如果不是放在此处,请注意在.lldbinit文件中修改libReveal.dylib文件的位置)

    • 2.reveal_load_dev:这个命令是在iOS模拟器和真机上面都有效。不过它需要在项目的Building PhasesCopy Bundle Resources中加入libReveal.dylib文件,添加方式请参考上一章节的动态库集成,请确保没有将其添加到Link Binary With Libraries中。
    • 3.reveal_star:这个命令发出一个通知启动RevealServer。
    • 4.reveal_stop:这个命令发出一个停止RevealServer。

Reveal 使用

断点处手动加载(模拟器调试为例)

  • 1.在AppDelegate.m文件中的- application:didFinishLanchWithOptions:方法中添加断点,运行项目(Ctrl + R),当程序执行到断点处时,在控制台输入reveal_load_sim
  • 2.控制台输入reveal_load_sim以后回车,出现字符串,如(void *) $0 = 0x00007fd1bb7895c0时表示此步骤成功。(如果出现(void *) $0=0x00000000000000全部是0的情况,请回去检查你的.lldbinit文件中的reveal_load_sim命令是否写错,Reveal程序是否默认放在/Applications/目录下。)
  • 3.点击继续执行
  • 4.加载结果

断点处自动加载(模拟器调试为例)

  • 1.在AppDelegate.m文件中的- application:didFinishLanchWithOptions:方法中添加断点
  • 2.右键断点图标-->选择编辑断点-->点击"Add Action"
  • 3.在编辑框中输入reveal_load_sim,并勾选Automatically continue after evalueating actions 。至此已经配置完成,下面直接运行xcode项目。
  • 4.运行xcode中的项目,程序执行到断点处会,xcode会自动输入命令"reveal_load_sim",并且程序会自动继续执行(因为勾选了Automatically continue after evalueating actions),此时控制台会输出一行信息表示加载成功,并且Reveal软件中也可以看到iOS程序的界面。