興味があろうがなかろうが。

なるべく役に立つ、とがった内容を記していきたいと思います。

【FreeCADプログラミング】FreeCADの自作プログラムをVisual Studio Codeでデバッグする方法

本日のお題は『FreeCADでデバッグする方法』です。

まだ始めたばかりで少々気が早いですが、デバッグの方法を先に学んでおきましょう。

これをやっておけば、プログラム規模が大きくなったときに役に立ちますからね。

1. 環境

  • FreeCAD 0.18

※Pythonのソースコードを書くことになりますが、Pythonのモジュールを別途インストールする必要はありません。FreeCAD内に元々モジュールが含まれています。

2. 前提

デバッグの方法については本家『freecadweb.org』に情報が載っています。

www.freecadweb.org

その中で、デバッグの方法として下記の2種類が記載されています。

  • winpdbを使った方法
  • Visual Studio Codeを使った方法

とりあえず『winpdbを使った方法』を先に調べてみました。

しかし、FreeCADに内包されているPythonのバージョンが2.7という古いバージョンであることがネックになっているのか、winpdbからアタッチすると、『Bad Version』というようなエラーが発生し、1日消費しても解決できませんでした。

というわけで、今回はなんとか上手くいった『Visual Studio Codeを使った方法』を紹介したいと思います。
(こっちの方法も一筋縄ではいきませんでしたが)

3. Visual Studio Codeを使ったデバッグ

本家『freecadweb.org』に記載されている情報だけでは、初見の私にはキツかったので、インストール~デバッグするまでの手順を説明していきます。

少々長いですが我慢してくださいね。

3.1. 準備するもの(FreeCAD以外)

  • Visual Studio Code (VSCodeUserSetup-ia32-1.39.1.exe)
    (最新版をダウンロードしてくれば問題ないです。)

https://azure.microsoft.com/ja-jp/products/visual-studio-code/

3.2. Visual Studio Codeのインストール

ダウンロードしたら、早速インストールしましょう。特に気にするところはなく、次へを押していけば良いです。

私の場合、デフォルトのインストールフォルダがAppDataの下に入るのが嬉しくなかったので、別のフォルダを切りました。

3.3. 日本語化 (必要であれば)

インストールできたら、今度は日本語化します。

日本語化にあたっては、下記サイト様の記事を参考にさせて頂きました。

qiita.com

3.4. Python Extensionをインストール

Visual Studio Codeはインストールしたばかりの状態だと、pythonのコードを認識できません

そのため、拡張機能をインストールします。

  1. 画面左側の『背中に×マークの付いた虫』のアイコンの下に、『ブロックのマーク』のアイコンがありますので、クリックします。
  2. クリックしたら、上部にテキスト入力バーが表示されますので『python』と入力します。
  3. 下のリストに、Pythonという項目が出てきますので、その項目横にある『緑地のInstall』ボタンを押します。
  4. インストール中は『インストールしています』と表示され、完了すると、ボタンが消えます。

拡張機能のインストールはこれで終わりです。

3.5. デバッグの構成情報作成

まずは構成情報というデバッグに必要な設定を定義します。

『freecadweb.org』の下記リンク最下部にVisual Studio Codeのデバッグ方法が載っていますが、このままの方法を適用しても、デバッグができませんでした。
(リモートデバッグ用の設定のため、スタンドアロンでデバッグする方法には適していなかったのかな?)

https://www.freecadweb.org/wiki/Debugging

色々調べた結果、下記設定手順でなんとかできました。

  1. メニューの[デバッグ - 構成を追加]を実行
  2. 下記のコードを入力し保存
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version""0.2.0",
    "configurations": [
        {
            "name""Python: Attach",
            "type""python",
            "request""attach",
            "port"5678,
            "host""localhost"
        }
    ]
}

3.6. Visual Studio Code用のPythonモジュールをインストール

PythonとVisual Studio Codeでデバッグのやり取りをする場合、Python側にptvsdというモジュールを追加インストールする必要があります

注意しなければならないのは、インストールする先はFreeCAD内に内包されているPythonであるという点です。

FreeCADとは関係なく、個別にインストールされたPythonに対して、インストールするわけではありません

下記、インストールの手順です。

3.6.1. コマンドプロンプトを起動し、FreeCADのbinフォルダへ移動

コマンドプロンプトを起動し、下記のフォルダへ移動します。

> cd FreeCADインストールフォルダ\bin
3.6.2. ptvsdをインストール

pythonからpipというパッケージインストール用のモジュールを呼び出して、インストールします。

> python -m pip install ptvsd

私の場合、上記のコマンドを実行した際、フォルダのアクセス許可関係のエラーが発生したため、下記のコマンドを実行しました。

> python -m pip install ptvsd --user

3.7. FreeCADからサンプルコードを実行

FreeCADを起動し、Visual Studio Codeがデバッグするためのコードを実行します。

まずは試しに下記のサンプルコードを実行しましょう。

# -*- coding: utf-8 -*-
import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost'5678), redirect_output=True)
ptvsd.wait_for_attach()

import FreeCAD
v1 = FreeCAD.Vector(5,0,0)
v1.normalize()
print (str(v1))
    

7行目の『ptvsd.wait_for_attach()』を通過し、FreeCADがフリーズ状態になれば成功です。デバッグが実施されるのを待っている状態になります。

3.8. Visual Studio Codeでブレークポイントを設置

FreeCADのサンプルプログラムが待ち状態になったので、今度はVisual Studio Codeからデバッグを開始します。まずはブレークポイントを設置します。

どこに設置しても問題はないですが、とりあえず14行目に配置してみましょう。

print (str(v1))

14の数字の左側をクリックすると、赤いマークが点灯すれば準備OKです。

3.9. デバッグの開始

Visual Studio Code画面の一番左側に『背中に×マークの付いた虫』のアイコンがあるので、クリックします。

クリックすると、その直上にデバッグと書いてあるラベルが現れます。その横にあるプルダウンを開き、『Python:Attach』という項目を選択します。

(デフォルトですでに選択されているかもしれません)

選択できたら、メニュー[デバッグ - デバッグの開始]を実行します。

3.10. デバッグ開始の確認

デバッグを開始すると、先ほどブレークポイントを設置したソースコードが表示され、14行目が黄色くハイライトされます。

ハイライトされている箇所で、処理が止まっている状態です。

3.11. パラメータの確認

デバッグが開始されたので、試しに変数の中身を見てみましょう。

画面左側に『変数』ビューが表示されているので、その中から『v1』の項目を探してください。

見つかったら、そこに入っている値を確認します。今回は以下のように入力されているはずです。

v1: Vector (1.0, 0.0, 0.0)

3.12. デバッグの終了

パラメータの確認ができたら、メニュー[デバッグ - デバッグの停止]を実行して、デバッグを終了しましょう。

これでデバッグの一覧の操作は終了です。お疲れ様でした。

4. 補足

4.1. デバッグ用のコードはリリース時に消すこと

サンプルコードで入力した下記のソースコードは、完成したプログラムには不要なコードとなります。
(デバッグ時にのみ必要なコードのため、リリースする際は不要)

import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost'5678), redirect_output=True)
ptvsd.wait_for_attach()

そのため、出来上がったらコメントアウトするなり、削除するなり、しておいてください。

5. 補足

5.1. FreeCAD内のPythonモジュールのバージョン

FreeCAD内に内包されているPythonのバージョンは『2.7.14』のようです。個人的には特に影響はありませんが、ちょっと古いですね。

何かバージョンアップする方法がないか探っていますが、今のところ方法は見つかっていません。

6. まとめ

  • Visual Studio Codeを使うことでデバッグができる
  • デバッグ用ソースコードはリリース時には消す

7. 最後に

デバッガは大きなプログラムを開発することになった際、必ず必要になるツールです。

今のうちに使い方に慣れておきましょう。

更なる情報をお探しの方は!

下記のリンクから、FreeCADプログラミングのトップページに飛びます。

よろしければご参照くださいませ。

www.interested-or-not.com