调试测试

<一>编译语言和直译式语言:

1>c++ oc都是编译语言。js是直译语言。编译器CLang +LLvm

2>不管是OC还是Swift,都是采用Clang作为编译器前端,LLVM(Low level vritual machine)作为编译器后端。所以简单的编译过程如图

调试测试_第1张图片
1-0
调试测试_第2张图片
1-1

编译器前端的任务是进行:语法分析,语义分析,生成中间代码(intermediate representation )。在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行。


3>编译器后端:

编译器后端会进行机器无关的代码优化,生成机器语言,并且进行机器相关的代码优化。iOS的编译过程,后端的处理如下

LVVM优化器会进行BitCode的生成,链接期优化等等

调试测试_第3张图片


LVM机器码生成器会针对不同的架构,比如arm64等生成不同的机器码

<二>执行一次XCode build的流程

调试测试_第4张图片

<三>IPA包的内容

例如,我们通过iTunes Store下载微信,然后获得ipa安装包,然后实际看看其安装包的内容。

右键ipa,重命名为.zip

双击zip文件,解压缩后会得到一个文件夹。所以,ipa包就是一个普通的压缩包。

调试测试_第5张图片

右键图中的WeChat,选择显示包内容,然后就能够看到实际的ipa包内容了。

<四>二进制文件的内容

通过XCode的Link Map File,我们可以窥探二进制文件中布局。在XCode -> Build Settings -> 搜索map -> 开启Write Link Map File  开启后,在编译,我们可以在对应的Debug/Release目录下看到对应的link map的text文件。默认的目录在

~/Library/Developer/Xcode/DerivedData/-对应ID/Build/Intermediates/



调试测试_第6张图片
调试测试_第7张图片

<五>dSYM文件
我们每次Archive一个包之后,都会随之生成一个dSYM文件。每次发布一个版本,我们都需要备份这个文件,以方便以后的调试。进行崩溃信息符号化的时候,必须使用当前应用打包的电脑所生成的dSYM文件,其他电脑生成的文件可能会导致分析不准确的问题。

参考:http://blog.csdn.net/hello_hwc/article/details/50036323

第一部分:看看UUID;

第二部分:使用命令查看dsym文件的uuid   Dsym调试 huangwenchen$ dwarfdump --uuid uau1.3.0.app.dSYM/

第三部分:看到log 定位到代码片段。

你可能感兴趣的:(调试测试)