天天看點

curl檢視swift狀态指令_Ubuntu上玩玩Swift——安裝,調試,VScode配置

curl檢視swift狀态指令_Ubuntu上玩玩Swift——安裝,調試,VScode配置

2018年蘋果開源了自己的程式設計語言Swift,更厲害的是谷歌深度學習架構Tensorflow開始做Swift的接口了,這讓我似乎看到了Swift的光明前景。别的不說,單就MacOS和iOS上部署深度學習模型,就讓我很期待了。之前的深度學習模型可以采用蘋果出的SDK,但是模型有限,很難滿足各種需求,要将自己開發的深度學習模型放在MacOS和iOS上,需要用C/C++開發,然後混合編譯。現在Swift Tensorflow還在開源社群發展階段,不适合機器學習玩家。相信在不久的将來,我們在MacOS和iOS上開發就隻需要Swift一種語言就可以了,一顆賽艇……

1. 安裝Swift

廢話少說,先安裝,我的平台是Ubuntu 18.04,安裝Swift的版本是5.2.5。我平時是做深度學習算法的,現在在Ubuntu 18.04上面安裝的是tensorflow 2.3.0,cuda 10.1。

第一步,下載下傳Swift 5.2.5的壓縮包。

https://swift.org/download/​swift.org

第二步,安裝依賴庫。雖然這裡需要gcc-5,python2.7,但我的是gcc-7.5.0, python 3.7,也沒啥問題。

apt-get 
           

第三步,把解壓的Swift拷貝到/usr下。或者在.bashrc裡輸出一下Swift壓縮包的路徑到PATH變量。

第四步,測試一下,建立一個hello.swift,輸入以下代碼。

print
           

然後直接可以在指令行裡運作swift hello.swift,或者把它編譯成可執行檔案swiftc -o hello hello.swift。

2. VScode

VScode是微軟開源的一個代碼編輯器,是一個很好用的IDE。現在,我們把它改造成一個swift的IDE.

第一步,安裝npm和Node.js。下載下傳node.js 12.18.3,解壓後,cp到/usr目錄下。這可以覆寫原有的npm和node。

第二步,安裝VScode。官網下載下傳.deb檔案,sudo dpkg -i XXXX.deb即可。

第三步,在github上下載下傳sourcekit-lsp-master源代碼,并解壓。

https://github.com/apple/sourcekit-lsp​github.com

第四步,進入sourcekit-lsp-master/Editors/vscode目錄下,指令行輸入

npm run createDevPackage
           

搞到一半會報錯

Fetching vscode.d.ts from: https://raw.githubusercontent.com/Microsoft/vscode/431ef9da3cf88a7e164f9d33bf62695e07c6c2a9/src/vs/vscode.d.ts
Error installing vscode.d.ts: Error: connect ECONNREFUSED 0.0.0.0:443
           

原因是vscode的網址不是這個了。這時候,我們打開sourcekit-lsp-master/Editors/vscode/node_modules/vscode/bin/install檔案。将其中三處vscode.d.ts結尾的url位址,改為

https://github.com/microsoft/vscode/tree/master/src

将package.json的url改為

https://github.com/microsoft/vscode/package.json

然後重新運作

npm run createDevPackage
           

如果下載下傳不了vscode.d.ts,可以私信向我要。

運作結束後,會在sourcekit-lsp-master/Editors/vscode/out下生成vscode extension的檔案,在指令行輸入:

code --install-extension out/sourcekit-lsp-vscode-dev.vsix
           

搞定啦,趕緊在vscode裡import Foundation試試自動補全吧。

3. Debug

3.1 指令行調試。

在ubuntu上面debug swift,需要lldb,這個工具是随着swift Ubuntu發行檔案一起發行的,是以如果你安裝了swift就已經安裝了lldb。我們寫一個檔案main.swift,在指令行裡調試一個試試。

var 
           

在指令行輸入

swiftc -g -o main main.swift
           

和gcc用法是不是很像?然後輸入

lldb main
           

就開始調試了。先輸入l看一下,附近周圍的代碼。

curl檢視swift狀态指令_Ubuntu上玩玩Swift——安裝,調試,VScode配置

在第三行設個斷點

b 3
           

然後輸入r運作至斷點,輸入

p a
           

檢視變量a的值。然後輸入c,繼續運作至下一段點,因為我們就一個斷點,是以就把程式運作完了。輸入q退出。當然你也可以輸入指令全稱run(r), continue(c), list(l), breakpoint(b), print(p), quit(q)。是不是和gdb類似?

除了編輯單個檔案,我們還可以編譯Package,在你想建立Package的目錄下打開指令行,輸入

swift package init --type executable
           

然後就會生成一個模闆Package,在Source/swift下生成了一個main.swift的hello world檔案。我們在Package的根目錄下,輸入

swift build
           

就編譯了整個Package,然後生成一個./.build/debug/swift的可執行檔案。可以使用lldb ./.build/debug/swift進行調試,也可以使用swift run直接運作。

3.2 VScode中調試。

說一千道一萬,指令行調試肯定不如IDE裡調試友善。我們進一步改造VScode,讓它可以調試swift代碼。首先,要安裝CodeLLDB這個插件,直接在extension商店裡搜尋即可。CodeLLDB自帶了一個lldb,隻能用來調試C/C++程式,我們要把它設定成swift自帶的lldb。在extension裡找到CodeLLDB,然後點選齒輪按鈕,在設定裡有個lldb:library。

curl檢視swift狀态指令_Ubuntu上玩玩Swift——安裝,調試,VScode配置

在這個對話框裡輸入/usr/lib/liblldb.so。如果你把swift沒有安裝在/根目錄下,做相應修改即可。

然後我們需要在項目根目錄下建立.vscode檔案夾,在.vscode裡面建立兩個json檔案,分别叫launch.json和tasks.json.

curl檢視swift狀态指令_Ubuntu上玩玩Swift——安裝,調試,VScode配置

在launch.json裡輸入

在tasks.json中輸入

同理,如果我們沒有建立Package,隻是想編譯單個檔案,隻需要把launch.json中的"program"改成"${fileDirname}/${fileBasenameNoExtension}". ${fileDirname}就是編譯檔案的目錄。${fileBasenameNoExtension}就是要編譯的檔案無擴充名的檔案。例如main.swift的${fileBasenameNoExtension}就是main。

然後把task裡面的command換成swiftc,在後面加上一個"args"參數

"args"
           

這樣,我們在VScode執行Debug,就先會運作tasks.json指定的任務

swiftc -g main.swift -o ./main
           

随後會執行lauch.json中的任務

lldb main
           

然後我們就可以在VScode裡調試啦。

curl檢視swift狀态指令_Ubuntu上玩玩Swift——安裝,調試,VScode配置

可以在左側的WATCH裡觀察變量,下方的DEBUG CONSOLE依然可以使用lldb指令。

繼續閱讀