一、方法
1. 配置遠(yuǎn)程解釋器(簡(jiǎn)單高效,強(qiáng)烈推薦?。。。?/h3>
?要求: 通過 SSH 從本地機(jī)器訪問遠(yuǎn)程服務(wù)器,使用任何預(yù)定義的端口從遠(yuǎn)程服務(wù)器訪問本地機(jī)器,最好關(guān)掉vpn等網(wǎng)絡(luò)代理服務(wù)。
常見問題:pycharm可以使用遠(yuǎn)程解釋器運(yùn)行,但是不能debug
單獨(dú)在遠(yuǎn)程執(zhí)行:
python -u /root/.pycharm_helpers/pydev/pydevd.py --multiproc --client 0.0.0. 0 --port 37990
?報(bào)錯(cuò):
Could not connect to 0.0.0.0: 37990
Traceback (most recent call last):
? File "/root/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_comm.py", line 456, in start_client
? ? s.connect((host, port))
ConnectionRefusedError: [Errno 111] Connection refused
Traceback (most recent call last):
? File "/root/.pycharm_helpers/pydev/pydevd.py", line 2173, in <module>
? ? main()
? File "/root/.pycharm_helpers/pydev/pydevd.py", line 2055, in main
? ? dispatcher.connect(host, port)
? File "/root/.pycharm_helpers/pydev/pydevd.py", line 1826, in connect
? ? self.client = start_client(self.host, self.port)
? File "/root/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_comm.py", line 456, in start_client
? ? s.connect((host, port))
ConnectionRefusedError: [Errno 111] Connection refused
問題原因分析:
要求: 通過 SSH 從本地機(jī)器訪問遠(yuǎn)程服務(wù)器,使用任何預(yù)定義的端口從遠(yuǎn)程服務(wù)器訪問本地機(jī)器。
2.?使用 Python 遠(yuǎn)程調(diào)試服務(wù)器配置 (有代碼侵入,不是很推薦)
?從主菜單中選擇 Run | Edit Configuration… 。運(yùn)行/調(diào)試配置對(duì)話框打開。您必須單擊工具欄,然后從可用配置列表中選擇 pythondebug Server。
輸入運(yùn)行/調(diào)試配置的名稱,設(shè)為 MyRemoteServer;指定運(yùn)行 IDE 的機(jī)器的端口號(hào)(這里是12345)和 IDE 主機(jī)名(這里是172.20.208.95);遠(yuǎn)程調(diào)試服務(wù)器將使用這些參數(shù)來(lái)訪問它。
根據(jù)IDE界面的提醒,安裝對(duì)應(yīng)的pydevd-charm;執(zhí)行 pydevd_pycharm.settrace
將本地機(jī)器上的路徑映射到遠(yuǎn)程機(jī)器上的路徑:
使用步驟:
1.? IDE 啟動(dòng)后,會(huì)顯示自己在監(jiān)聽狀態(tài),然后在Pycharm中設(shè)置斷點(diǎn)。
2.? 然后運(yùn)行遠(yuǎn)端的py程序,使用命令行執(zhí)行(并非在IDE中,是在遠(yuǎn)端命令執(zhí)行)
修改源代碼文件如下:
import math
#==============this code added==================================================================:
import pydevd_pycharm
pydevd_pycharm.settrace('172.20.208.95', port=12345, stdoutToServer=True,
stderrToServer=True)
#================================================================================================
class Solver:
def demo(self, a, b, c):
d = b ** 2 - 4 * a * c
if d > 0:
disc = math.sqrt(d)
root1 = (-b + disc) / (2 * a)
root2 = (-b - disc) / (2 * a)
return root1, root2
elif d == 0:
return -b / (2 * a)
else:
return "This equation has no roots"
if __name__ == '__main__':
solver = Solver()
while True:
a = int(input("a: "))
b = int(input("b: "))
c = int(input("c: "))
result = solver.demo(a, b, c)
print(result)
如上,可以看到該方法對(duì)代碼有侵入!
注意事項(xiàng): 如果將程序部署到遠(yuǎn)端,那么需要Remote Debug配置中的localhost修改為安裝Pycharm主機(jī)的IP地址,同時(shí)將PycharmRemoteDebug.py中的localhost改為同樣的IP地址。
使用Pycharm的Deployment功能映射遠(yuǎn)程和本地代碼;
斷點(diǎn)命中時(shí),客戶端程序處于暫定狀態(tài);
如果沒有開啟Remote Debug Server,運(yùn)行客戶端會(huì)卡?。?br> 不需要使用Remote Debug時(shí)一定不要在程序啟動(dòng)的時(shí)候import PycharmRemoteDebug模塊;
總結(jié): 因此,此方案,必須保證遠(yuǎn)端環(huán)境可以主動(dòng)連接到你IDE本地環(huán)境!
?
二、遠(yuǎn)程調(diào)試原理簡(jiǎn)介
如果程序部署在遠(yuǎn)端,要在本地獲取程序運(yùn)行狀態(tài)并進(jìn)行斷點(diǎn)調(diào)試,必然需要連接到程序并進(jìn)行通訊;利用Pycharm進(jìn)行遠(yuǎn)程調(diào)試的過程中,Pycharm充當(dāng)服務(wù)器的角色。
首先,對(duì)Pycharm Run/Debug Configures進(jìn)行配置,指定Pycharm安裝端的一些屬性,比如Pycharm所在主機(jī)的IP地址和端口號(hào)等。
然后,啟動(dòng)Pycharm的遠(yuǎn)程調(diào)試。這時(shí)Pycharm處于監(jiān)聽狀態(tài),等待獨(dú)立于IDE之外運(yùn)行的程序的連接。
其次,在遠(yuǎn)端程序剛啟動(dòng)時(shí),需要根據(jù)Pycharm Debug Configures中的配置信息,連接到Pycharm。
最后,連接成功之后,當(dāng)遠(yuǎn)程客戶端運(yùn)行到本地Pycharm中設(shè)置的斷點(diǎn)處時(shí),便會(huì)在斷點(diǎn)處暫停程序的執(zhí)行,而在本地Pycharm命中斷點(diǎn)處能夠看到遠(yuǎn)端程序當(dāng)前運(yùn)行的狀態(tài)和調(diào)用棧等信息并進(jìn)行下一步跟蹤和逐步調(diào)試。
本地Pycharm中調(diào)試的源代碼工程應(yīng)和遠(yuǎn)端運(yùn)行的程序源代碼保持一致。
Pycharm中Remote Debug Configure的配置要保證能夠被遠(yuǎn)程連接。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-730450.html
由于遠(yuǎn)程客戶端使用Pycharm提供的pydevd模塊連接到本地的Pycharm remote Debug,兩者通訊鏈接均遵循Pycharm自定義的協(xié)議;因此我們不必關(guān)心Pycharm設(shè)置斷點(diǎn)和遠(yuǎn)程客戶端命中斷點(diǎn)過程中兩端具體的實(shí)現(xiàn)和處理過程,只要保證我們的Debug Configure有效即可;然后在需要的地方通過斷點(diǎn)暫定程序,分析當(dāng)前程序狀態(tài)找出問題所在。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730450.html
到了這里,關(guān)于PyCharm 遠(yuǎn)程debug 快速上手的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!