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

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

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

最后一步,在vscode打斷點,按F5進行調試就好。
一點點說明,還記得ftp-sync插件嗎,他可以在我們保存代碼的時候同步到遠程主機,如果我們代碼可以自動重新加載,調試能更加方便,但是主要要重新連接調試哈。
附上我的測試代碼和截圖
# 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)

上面有一個調試技巧,因為flask框架在debug模式會產(chǎ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))
如果有什么建議或者提問歡迎評論!