Posted at

VSCodeでPythonのリモートデバッグ


はじめに

PyCharm ProfessionalのRemote Development機能は非常に便利だが、個人的にエディタとしては非常に使いにくい。これをVSCodeでやれる方法はないかと探したところ、実装予定はありそうだが未実装なので、リモートデバッグで我慢することにした。その際の設定に苦労したので備忘として残しておく。


やり方



  1. SSH FSを使ってワークスペースにリモートのディレクトリをマウントする

  2. リモートデバッグ時の設定でファイルのマッピングを、リモートディレクトリ→マウントしたディレクトリとする

  3. リモートでデバッグ対象のpythonスクリプトを実行する(デバッガの接続待機)

  4. VSCodeからリモートのデバッグ対象プロセスにアタッチする

SSH FSの使い方は、

Visual Studio CodeでSSHごしにファイルを編集する

リモートデバッグの基本は、

VSCodeでのPythonのデバッグと、Dockerコンテナ環境に接続してリモートデバッグする方法

を参照のこと


設定

設定したい内容は、

リモートディレクトリ

user_name@192.168.0.x:/home/user_name/projects/project_name

配下のコードをVSCodeで編集しながらデバッグする

SSH FSの設定


project_name.sshfs.jsonc

{

"label": "project_name@ubuntu",
"root": "/home/user_name/projects/project_name",
"host": "192.168.0.x",
"port": 22,
"username": "user_name",
"password": true
}

リモートデバッグの設定


launch.json

{

"name": "Python Attach to project_name@ubuntu-ml",
"type": "python",
"request": "attach",
"pathMappings": [
{
"localRoot": "ssh://project_name",
"remoteRoot": "/home/user_name/projects/project_name"
}
],
"port": 3000,
"host": "192.168.0.x"
}

"pathMappings"の"localRoot"には、

Ctrl+Shift+PからOpen Workspace Configuration Fileで見られる、folders内、SSH FSのuriを指定する。


デバッグ用スニペット

リモートで実行時に、第一引数をdebugとするとデバッグ用にデバッガの接続を待機する。リンク先より拝借。

if __name__ == '__main__':

if (len(sys.argv) > 1) and (sys.argv[1] == "debug"):
import ptvsd
print("waiting...")
ptvsd.enable_attach(address=('0.0.0.0', 3000))
ptvsd.wait_for_attach()
main()


詰まったところ

Remote WorkspaceでSFTPを使う場合、"pathMappings"を認識させる方法が分からなかった。

・"pathMappings"は"/path/to/remote" : "/path/to/local"

と書いても認識してくれない