Swift-SIL调试

SIL

用法

生成SIL文件

1
swiftc -emit-sil main.swift >> ./main.sil

阅读SIL

解释文档

  • @main这里标识我们当前main.swift的入口函数,SIL 中的标识符名称以@作
    为前缀
  • %0,%1…在SIL也叫做寄存器,这里我们可以理解为我们日常开发中的常量,一旦赋值之后就不可以再修改,如果SIL中还要继续使用,那么就不断的累加数字。同时这里所说的寄存器是虚拟的,最终运行到我们的机器上,会使用真的寄存器。
  • alloc_global创建一个全局变量
  • global_addr拿到全局变量的地址
  • metatype拿到LGTeacher的Metadata
  • apply 代表调用方法,类似于objc里面的objc_msgSend函数
  • alloc_ref创建某一个类型的实例对象,当前实例对象引用计数为1
  1. 乱码的字符串,执行如下代码恢复
    1
    xcrun swift-demangle s4main7TeacherC3ageSivg
  2. %1, %2
    这些可以理解为虚拟的寄存器,或者理解为常量(赋值之后不会改变)