[SDN | Pycharm]_利用Pycharm來”Remote” Debug SDN Ryu Controller

緊接著上一篇是LOCAL DEBUG:

[SDN | Pycharm]_利用Pycharm來Debug SDN Ryu Controller

 

此篇將會透過Remote Debug的方式,從Windows Remote debug到Ubuntu 14.04上的Ryu app

 

但Remote Debug在Pycharm上需要Professional版才有,Community不支援

 

在Pycharm上RemoteDebug(下稱RDEBUG)有兩種方式

1.透過SSH連線到遠端的Interpreter Debug

2.透過pydevd套件建立Client(remote端)-Server(Local端)的Debug連線

 

第一種方式其實最快也不用改什麼code,但我一直沒成功,因為設定好遠端Interpreter之後,pycharm給遠端interpreter的路徑一直是有問題的…

第二種才有成功。

 

但還是放個圖,指引一下設定方式:

 

1.本機端上,到專案內Interpreter設定頁面,新增一個remote interpreter,這邊直接透過ssh連線會幫你設定好

2016-07-12_1-04-39

 

2.新增遠端py3 interpreter成功

 

3.但很可惜的是就算是使用remote host上的python程式並設定妥remote interpreter,但pycharm在遠端debug下的cmd檔案位置仍然並非該remote端的正確位置(變成一段uuid後面接正確的路徑)


 

而第二種方式則是使用pydevd套件,這種方式的運作詳細說明我這邊就不贅述,直接附上一些合適的參考資料:

http://dasheyuan.com/post/pycharm-remote-debugging/

https://jinsenglin.gitbooks.io/memo-of-python/content/pycharm/remote-debugging.html

https://blog.jamespan.me/2016/06/09/remote-debug-your-python-code/

http://blog.csdn.net/rogerjava/article/details/13095043

 

1.首先先到run->Edit configurations新增Remote debug server設定

 

2.新增Python Remote debug server

 

3.隨便取個名稱,以及填入你local server(不是remote端的ip喔)要監聽的ip,port要不要都可以,另外path mapping也可以不用填,另外要注意綠色箭頭需選取新增的debug server,否則如果你有座第一步驟,可能debugger還是停留在第一種remote interpreter debug的情況。

 

4.之後須於remote端上要debug的部分加入code,另外記得在remote端上用pip(pip3)安裝對應python版本的pydevd(pip install pydevd)。

 

5.接著運行debug server

 

6.之後debug server將會等待新的連線

 

7.在remote端執行剛剛已經注入pydevd套件的code,不一定要在一開始的執行程式內注入,剛剛是把pydevd注入在自訂的ryu app上,但在sdtest.py內我也有放一樣的注入code片段

 

8.運行後,只要有注入的檔案,都能夠進行debug動作

 

另需要提的是,若要完整結束pydevd遠端debug,在remote端於程式結束前須執行

pydevd.stoptrace()

 

2016/08/28 補充 ####

如果你發現可以中斷,但觀察不到變數,只會顯示”unable to display frame variables”時,其實是ryu的執行序模組在作怪

若有import ryu.lib.hub,則可能會出現這個問題

解決辦法就是加入

hub.patch(thread=False)

 

詳細原因及說明可以參考:https://sourceforge.net/p/ryu/mailman/message/33269324/

 

以上~

 

 

Leave a comment 取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Exit mobile version