Armadilloフォーラム

VScodeとpythonスクリプトのpdbによるデバッグ環境構築について

yanagida_iwaya

2023年12月25日 15時57分

お世話になっております。

現在、以下条件でpdbを用いたpythonデバッグ環境構築を目指しております。
仮想開発環境:ATDE9(Oracle VM Virtual Box 7.0にて起動)
コンテナOS:Alpine 3.18.4
言語:python3.11.6
IDE:VScode(ABOS-DE使用)
目標デバッグ手順:以下手順でpdbによるブレイクポイント、変数値チェックを以下の手順で実施できること
 1. ABOS-webによりコンテナなどインストール
 2. コンテナ上で動作対象となるpythonスクリプトの任意の行に、ブレイクポイントとなる「pdb.set_trace()」を追加
 3. ATDE9 VScode ABOS上から「App run on Armadillo」実施
 4. VScode上 TERMINALに表示されるコンソール上にてブレイクポイントで停止した旨の出力を確認
 5. pdb入力モードに切り替わり次第、コマンド入力でデバッグ作業実施

上記目標デバッグ手順4までは動作することを確認しておりますが、5にてpdb入力モードに切り替わった後、コマンドをVScodeのTERMINAL上に入力しても受け付けされません。
なぜ受付しないのか、問題の切り分けをどこから行えばよいかわからず、何か解決法などご存じでしたらご教授いただければ幸いです。

以上、よろしくお願いいたします。

コメント

yanagida_iwaya

2023年12月25日 16時08分

追記です。
以下、VScode TERMINAL(App run on Armadillo)からpdbにコマンド入力を思考した際のログになります。(プロジェクト名、キー値などは伏せ字、または削除しています)

Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
XXXX.conf                                                                                                                                 100% 1267   252.9KB/s   00:00    
Starting 'XXXX'
XXXX
> /vol_app/src/main.py(XXX)main()
-> print("test")
(Pdb) next
n
n
h
bt

その他必要な情報などありましたら、都度ご指摘いただければ幸いです。
以上、よろしくお願いいたします。

at_shiita.ishigaki

2023年12月27日 9時14分

石垣です。

> 上記目標デバッグ手順4までは動作することを確認しておりますが、5にてpdb入力モードに切り替わった後、コマンドをVScodeのTERMINAL上に入力しても受け付けされません。

ABOSDEのプロジェクトではコンテナからの出力は見えるようにしていましたが、
パソコンからの入力を Armadillo に送ることを想定しておりませんでした。

pdb で入力を行うためには、以下2つのファイルを編集して頂く必要があります。

1. config/app.conf
2. scripts/util.sh

順番に変更点を挙げさせて頂きます。

1. config/app.conf
add_args -t を add_args -it に変更

2. scripts/util.sh
隠しファイルのため、vscode 上で編集するにはターミナルで以下のコマンドを入力してください。

[ATDE path/to/project]$ code scripts/util.sh

以下の行を変更

	ssh -F config/ssh_config Armadillo "podman_start $container \
		&& podman logs -f $container"

	ssh -F config/ssh_config Armadillo "podman_start $container \
		&& podman attach $container"

に変更

以上2つのファイルを書き換えることによって、pdb が動作することを確認できました。

来月のアップデートにこちらの対応を入れたいと考えております。

以上、よろしくお願い致します。

yanagida_iwaya

2024年1月10日 18時06分

石垣様

連絡が遅くなり申し訳ありません。
ご確認と対応手順の共有、ありがとうございました。
試行できるタイミングで試してみたいと思います。

また問題など起こりましたら追加で問い合わせをさせてください。
よろしくお願いします。

yanagida_iwaya

2024年1月16日 10時22分

本件、ご教示いただいた通りの手順でpdbでのデバッグができること、弊社環境でも確認できました。
ご対応ありがとうございました。

参考程度にお聞きしたいのですが、今後ABOSDEにて、vscodeのrun & debug機能のように、GUIでpdbなどでのデバッグを実施可能にする機能を実装する予定はありましたでしょうか?
以上、よろしくお願いいたします。

at_shiita.ishigaki

2024年1月16日 11時09分

石垣です。

> 本件、ご教示いただいた通りの手順でpdbでのデバッグができること、弊社環境でも確認できました。
> ご対応ありがとうございました。

ご確認頂きありがとうございました。

> 参考程度にお聞きしたいのですが、今後ABOSDEにて、vscodeのrun & debug機能のように、GUIでpdbなどでのデバッグを実施可能にする機能を実装する予定はありましたでしょうか?
> 以上、よろしくお願いいたします。

vscode のデバッグ機能を使える機能を追加する予定は今の所ありませんでした。

以上、よろしくお願い致します。

yanagida_iwaya

2024年1月16日 16時06分

お世話になっております。

> vscode のデバッグ機能を使える機能を追加する予定は今の所ありませんでした。
把握いたしました、ご確認ありがとうございました。

at_shiita.ishigaki

2024年1月17日 11時49分

石垣です。

ABOSDE で作成した Python プロジェクトで VSCode の Python 拡張機能のデバッグ機能を使うことができましたので共有させて頂きたいと思います。

VSCode の Python 拡張機能のデバッガーは debugpy を使用しています。
https://github.com/microsoft/debugpy

Armadillo 側で debugpy の client を待機する方法も可能かと思いますが、今回は VSCode の SSH 機能を使って、debugpy を起動しました。
以下に手順を記載します。

ローカル VSCode の変更手順
1. Python プロジェクトを VSCode で開く(以降ここのパスを /path/to/project と記載します)
2. /path/to/project/container/packages.txt に以下を記載

openssh-server

3. /path/to/project/config/ssh_config に以下を記載

Port 2222

4. /path/to/project/config/app.conf に以下を記載

add_volumes /root/.ssh:/root/.ssh
add_volumes /run/sshd:/run/sshd
add_ports 2222:22

5. /path/to/project/config/app.conf の set_command を以下に変更

set_command sh -c 'python3 /vol_app/src/main.py & echo "$!" > /run/app.pid; exec /usr/sbin/sshd -D'

6. $HOME/.ssh/config に以下を記載 (vscode で config ファイルを開く場合はターミナルに次のコマンドを入力 `code $HOME/.ssh/config`)

Host Armadillo
    Hostname 172.16.1.75
    User root
    Port 2222
    IdentityFile ${HOME}/.ssh/id_ed25519_vscode
    UserKnownHostsFile config/ssh_known_hosts
    StrictHostKeyChecking accept-new

7. VSCode 左ペインの 「ABOSDE Explorer」から「開発版 SWU を生成」を実行
8. 生成された development.swu を Armadillo にインストールしてください。

以上の手順により Armadillo のコンテナとして起動している Python プロジェクトコンテナは
ssh サーバーを起動し、ABOS と同じ ssh の鍵を使用することができます。
また、ABOS の 2222 ポートをコンテナの 22 ポートに接続しています。

9. VSCode 左ペインの「拡張機能」から「Remote - SSH」 をインストール
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.re…
10. VSCode 左ペインの「リモート エクスプローラー」に「Armadillo」が表示されているので、「新しいウィンドウで接続…」を選択
これにより、ABOS 上で動作している Python プロジェクトコンテナに VSCode の SSH で接続が完了しました。

初回以降は、手順10. の「リモート エクスプローラー」の「新しいウィンドウで接続…」のみで、Python プロジェクトコンテナに接続することができます。

次に、手順10. で開かれた リモート VSCode で必要な手順になります。
VSCode が ローカル VSCode と リモート VSCode の2つ開かれていると思いますので、リモートの方を選択してください。

1. VSCode 左ペインの「拡張機能」から「Python」 をインストール
https://marketplace.visualstudio.com/items?itemName=ms-python.python
2. VSCode 左ペインの「フォルダーを開く」を選択し「/vol_app」を選択
3. VSCode エクスプローラーで src/main.py を開く
4. F5 キーを押すことでデバッグを開始
5. 初回デバッグ時のみ、「デバッグ構成を選択する」と表示されるので「Python ファイル」を選択

以上の設定により、VSCode の Python 拡張機能のデバッグ機能を使って Armadillo 上で動作しているプロジェクトをデバッグすることができので、
VSCode 上でブレイクポイントの設定や変数等を見ることができるようになります。

一点気をつけていただきたいのですが、
リモート VSCode 上でファイルを編集した場合、コンテナの再起動時やArmadilloの再起動時に、編集した内容が戻ってしまいます。
ですので、Armadillo の電源を着る前に リモート VSCode の編集箇所をローカル VSCode に適応することを行ってください。

何か不明な点等ありましたら、ご連絡ください。
以上、よろしくお願い致します。