VSCode+Pythonのリモートデバッグ
追記:もっと良い方法があった。こっちだとソース修正が不要になる。→ VSCode+Pythonのリモートデバッグ:その2 - 自分用メモ
HTTF2022のようなマラソンマッチでは、作成したpythonスクリプトを別プログラムからキックすることになることが多い。 普段のようにVSCodeから実行する場合は、ブレークポイントを仕掛けたりエラー箇所で停止して変数を見れたりするけれど、別プログラムからキックされている場合はそんなことはできないので困る。
このようなときにどうすればよいのか?を調べて見つけたのでメモする。
なお、この手順はWindows10のWSL2のUbuntu上のpython3で行っている。 VSCodeについては、Windows上で動いているけどRemote機能をつかってUbuntu接続している。
やること
事前準備:ptvsd をインストール(pip install ptvsd)
Pythonコードに追加
コード例
pythonスクリプトの先頭の方に追記するもの
import sys # デバッグ用(引数にdebugがあればptvsdでデバッグする) if (len(sys.argv) > 1) and (sys.argv[1] == "debug"): import ptvsd print("## [debug mode] waiting for debugger attach (port:5678)", file=sys.stderr) ptvsd.enable_attach(address=('0.0.0.0', 5678)) ptvsd.wait_for_attach() print("## [debug mode] debugger was attached", file=sys.stderr)
VScodeのアタッチの設定例
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: アタッチ", "type": "python", "request": "attach", "connect": { "host": "localhost", "port": 5678 }, "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "${workspaceFolder}", } ] } ] }