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上に入力しても受け付けされません。
なぜ受付しないのか、問題の切り分けをどこから行えばよいかわからず、何か解決法などご存じでしたらご教授いただければ幸いです。

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

コメント

追記です。
以下、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 が動作することを確認できました。

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

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

石垣様

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

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

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

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

at_shiita.ishigaki

2024年1月16日 11時09分

石垣です。

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

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

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

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

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

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

> 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 に適応することを行ってください。

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

> 石垣です。
>
> 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 に適応することを行ってください。
>
> 何か不明な点等ありましたら、ご連絡ください。
> 以上、よろしくお願い致します。
>
石垣 様

kazumori88こと、森﨑と申します。
debianでのプロジェクトをABOSに移行しようと検討しています。

[ABOSDE で作成した Python プロジェクトで VSCode の Python 拡張機能のデバッグ機能を使うことができました」
との記事を見つけ、上記の手順でデバックできることを確認しました。
質問ですが、
1.container/packages.txtにopenssh-serverを追記しましたが、リモートsshでVSCODEを立ち上げると、vscodeサーバーがダウンロードされ、.vscode-serverがインストールされ、このサーバーで動作しているように思うのですが、これでいいのでしょうか?python拡張機能もこの中にインストールされています。
2.デバックを行えるのはいいのですが、armadillo-640をpoweoffして再起動すると、.vscode-serverおよび拡張機能が消えて、再度、インストールを要求されます。これを回避する方法はあるのでしょうか?
3.atmark@atde9:~$ podman imagesを実行すると、下記のように同じexample2で2つのコンテナイメージが存在するように見えるのですが、
これでいいのでしょうか?
REPOSITORY TAG IMAGE ID CREATED SIZE
⓵localhost/arm32v7/example2 latest 7dd8982e1ec3 41 hours ago 340 MB
⓶localhost/example2 latest 7dd8982e1ec3 41 hours ago 340 MB

異常、よろしくお願いします。

at_reika.yamazaki

2025年3月14日 21時40分

お世話になっております。山崎です。

1,2 についてですが、ご使用のコンテナ内に vscodeサーバーが存在しないため、毎回ダウンロード・インストールが実行されていると思われます。
こちらを防ぐ方法として、あらかじめコンテナに vscodeサーバーをインストールしておく方法が考えられます。
こちらの記事で紹介されていることが近いかと思われます。
https://qiita.com/zaki-lknr/items/11528d1b745c1e4e5539

こちらを試す場合は ABOSDE のプロジェクトに以下の修正が必要です。

■vscode サーバをダウンロード
ご使用している vscode の help - About から vscode のバージョン情報を確認します。ここに "commit:xxxxxxxx" という記述があると思います。
このコミットID から vscode をダウンロードする処理をご使用のプロジェクトの /container/Dockerfile の RUN 行に追加します。

RUN apt-get update && apt-get upgrade -y \
    && apt install -y curl\
    && curl -O https://update.code.visualstudio.com/commit:<取得した値>/server-linux-x64/stable/vscode-server-linux-x64.tar.gz \
    && apt-get install -y ${PACKAGES} \
    && apt-get clean

書き換え後、[開発用 SWU を生成] で作成した SWU イメージを Armadillo にインストールして実行してみてください。

■ extension.js の書き換え
以下にある extension.js を修正して、ダウンロードした vscode-server-linux-x64.tar.gz を使用するように書き換えます。

$ code ~/.vscode/extensions/ms-vscode-remote.remote-ssh-<バージョン>/out/extension.js

以下の文字列を書き換えます。

CURL_OUTPUT=$(curl${g()}--connect-timeout 7 -L $DOWNLOAD_URL --output vscode-server.tar.gz -w "%{http_code}")\n\t\t\tif [[ ($? != 0) || ($CURL_OUTPUT != 2??) ]]
↓
cp vscode-server-linux-x64.tar.gz .

上記で起動できるか試してみていただけますと幸いです。

3 についてですが、ATDE 上にはコンテナイメージが二つ存在するで合っています。
各プロジェクトは一度以下のようなコンテナイメージを生成します。
localhost/arm32v7/<プロジェクト名>:latest
このコンテナイメージをもとにした、配置用のプロジェクト名のコンテナイメージを生成します。
localhost/<プロジェクト名>:latest
Armadillo にはこのコンテナイメージのみがインストールされます。

以上、ひとまずのお返事になります。
どうぞよろしくお願いいたします。