在命令行编译和调试Swift程序

来源:互联网 发布:整容软件 编辑:程序博客网 时间:2024/06/05 00:37

因为个人工作习惯的关系,对于命令行的喜爱甚于GUI,所以安装了Xcode 6 Beta 版后,一直想看看Swift 在命令行下该怎么编译,运行和调试。


没有找到特别相关的文档,所以就自己动手在Xcode 的安装目录下找了一下,做了一些尝试。


1. 运行Swift

新的Xcode 提供了一个Swift的程序,可以编译Swift 代码,也可以进入交互性的编程模式(REPL)

/Applications/Xcode6-Beta.app//Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift


可以把上述目录加入PATH,这样你就可以直接运行swift了。


但是如果还安装了其他Xcode 版本,比较好的方式是设置Xcode命令行路径, 避免所用的其他命令行工具版本不一致。

sudo xcode-select -s /Applications/Xcode6-Beta.app/Contents/Developer


然后就可以运行swift如下:

xcrun swift

Welcome to Swift!  Type :help for assistance.

  1> let str = "Hello Swift!"

str: String = "Hello Swift!"

  2> println (str)

Hello Swift!

  3> :quit


2.  编译Swift 程序

一个简单的swift 程序:


sample.swift:

let str = "Hello Swift!"

println(str)


在命令行编译Swift程序

xcrun swift -emit-executable -sdk $(xcrun --show-sdk-path --sdk macosx) sample.swift


swift 命令行有几个有意思的参数,除了-emit-executable用来生成可执行文件,还可以生成library,甚至生成LLVM IR (Intermediate Representation)。 如果你对LLVM IR熟悉的话,可以研究一下。


这样的话, 就生成一个sample 的可执行文件:

./sample

Hello Swift!


3.  调试Swift 程序

Xcode 提供了LLDB作为swift 的调试器。 如果想进行源代码级的调戏,请重新编译swift 程序,并带上-g参数,这样目标文件中才有相关的调试信息。

xcrun swift -emit-executable -sdk $(xcrun --show-sdk-path --sdk macosx) -g sample.swift 


然后运行调试器

lldb sample

(lldb) l                 => list the source code

   1   

   2  let str = "Hello Swift!"

   3  println(str)

(lldb) b 3             => set breakpoint at line 3

Breakpoint 1: where = sample`top_level_code + 57 at sample.swift:3, address = 0x0000000100001589

(lldb) r                => run the program

Process 3003 launched: '/Users/andy/coderepo/swift/sample' (x86_64)

Process 3003 stopped

* thread #1: tid = 0x8019, 0x0000000100001589 sample`top_level_code + 57 at sample.swift:3, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1

    frame #0: 0x0000000100001589 sample`top_level_code + 57 at sample.swift:3

   1   

   2  let str = "Hello Swift!"

-> 3  println(str)

(lldb) po str   => print str variable

"Hello Swift!"


LLDB的命令和GDB基本一样,所以上手应该不难。 


另外一个要注意的是老版本的LLDB并不支持Swift语言,如果发现没办法看到Swift 的源代码,或者查看变量有问题,请检查一下用的LLDB是不是正确。 一个简单的方法是用ps看运行的LLDB是不是Xcode6 Beta 目录下的:

ps -ef | grep lldb

  501  3047   447   0 11:13PM ttys000    0:00.20 /Applications/Xcode6-Beta.app/Contents/Developer/usr/bin/lldb sample




0 0