[SDN | Pycharm]_利用Pycharm來”Remote” Debug SDN Ryu Controller
緊接著上一篇是LOCAL DEBUG:
https://www.ntex.tw/wordpress/2867.html
此篇將會透過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連線會幫你設定好
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
很抱歉,必須登入網站才能發佈留言。