文章有更新,具體請看:http://m.itdecent.cn/p/51000ae5b2f7
最近遇上一個(gè)糾結(jié)的事情,就是代碼放到服務(wù)器之后才出現(xiàn)錯(cuò)誤,但是線上調(diào)試往往采用直接修改線上代碼,然后print結(jié)果,這樣子非常不友好,所以決定尋找遠(yuǎn)程調(diào)試方案。
在網(wǎng)上一搜,都是使用pycharm來進(jìn)行遠(yuǎn)程調(diào)試,但是這是專業(yè)版才有的功能,這可難了我這個(gè)平時(shí)使用pycharm社區(qū)版的人,好在發(fā)現(xiàn)vscode又開源又支持遠(yuǎn)程調(diào)試,下面已遠(yuǎn)程調(diào)試開發(fā)flask應(yīng)用為例子說一下如何進(jìn)行遠(yuǎn)程調(diào)試。
首先,我們要安裝vscode
網(wǎng)址是:https://code.visualstudio.com/Download
這個(gè)IDE的好處是插件多,并且支持win,linux和mac
第二步,我們需要安裝開發(fā)python的插件和一個(gè)同步代碼到遠(yuǎn)程主機(jī)的插件
直接在IDE里搜索下面兩個(gè)插件安裝就好

這兩個(gè)插件怎么用呢,可以參考他們的說明文檔,只要配置好就行了。下面是我的配置。

第三步,要在python代碼引入ptvsd這個(gè)庫(微軟的python遠(yuǎn)程調(diào)試支持,很厲害的庫,pip安裝就好)
import ptvsd
ptvsd.settrace(None, ('0.0.0.0', 8000))
第四步,很關(guān)鍵,要在遠(yuǎn)程主機(jī)啟動(dòng)python進(jìn)程,但是需要代碼在運(yùn)行才可以調(diào)試
個(gè)人覺得,應(yīng)該是這個(gè)ptvsd庫打開了一個(gè)socket,然后vscode與socket通訊來獲取調(diào)試結(jié)果
第五步,配置vscode調(diào)試配置

最后一步,在vscode打斷點(diǎn),按F5進(jìn)行調(diào)試就好。
一點(diǎn)點(diǎn)說明,還記得ftp-sync插件嗎,他可以在我們保存代碼的時(shí)候同步到遠(yuǎn)程主機(jī),如果我們代碼可以自動(dòng)重新加載,調(diào)試能更加方便,但是主要要重新連接調(diào)試哈。
附上我的測試代碼和截圖
# coding:UTF-8
from flask import Flask
import ptvsd
import socket
try:
??? address = ('127.0.0.1', 12345)
??? s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
??? s.bind(address)
except socket.error:
??? ptvsd.settrace(None, ('0.0.0.0', 8000))
app = Flask(__name__)
@app.route('/')
def index():
??? a = 5 + 6
??? return "ok"
if __name__ == '__main__':
??? app.run(host='0.0.0.0', port=3000, debug=True)

上面有一個(gè)調(diào)試技巧,因?yàn)閒lask框架在debug模式會(huì)產(chǎn)生兩個(gè)進(jìn)程,所以我們得在工作進(jìn)程使用ptvsd,所以有下面這神奇代碼。
try:
??? address = ('127.0.0.1', 12345)
??? s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
??? s.bind(address)
except socket.error:
??? ptvsd.settrace(None, ('0.0.0.0', 8000))
如果有什么建議或者提問歡迎評論!