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

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

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

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

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

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

1. 環境

  • FreeCAD 0.20
  • FreeCAD 0.21 のVER UPをしました

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

2. 前提

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

www.freecadweb.org

その中で、デバッグの方法として3つの方法が紹介されていますが、今回はなんとか上手くいった『Visual Studio Codeを使った方法』を紹介したいと思います。

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

Visual Studio CodeはすでにINSTALLしているので3.1~3.4までは不要

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

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

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

  • Visual Studio Code (VSCodeUserSetup-x64-1.75.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のソースコードをpythonと認識できません

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

  1. 画面左最下部の『管理』のアイコンをクリックします。
  2. クリックすると、ポップアップメニュー内に『拡張機能』という項目があるので選択します。
  3. クリックすると、拡張機能の検索画面が出てくるので検索バーに『Python』と入力します。
  4. 下のリストに、Pythonという項目が出てきますので、その項目横にある『インストール』ボタンを押します。
  5. インストール中は『インストールしています』と表示され、完了すると、ボタンが消えます。

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

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

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

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"
????????}
????]
}
launch.json

ここの記載は標準的な環境に一からinstallした場合のことなので異なる

今回のマクロ環境は H:\python-test1\0170-FREEcadにプログラム関係を記載する事にする

そのため VS CODEを開いてこのDIRECTRYを指定する。 

このdirectryで何をするかの設定がとわれるので、PYTHONを指定すると .vscodeの中にLUNCH.JASON FILEができあがるので、ここでは

の記載のある内容を転機してlunch.jasonを作っておく. その方法は

1)実行するDirectry をまず指示

2)Visual Studio Code(VS Code)で launch.json を作成するには、次の手順。

・VS Code の左サイドメニューにある「実行とデバッグ」(虫&三角)を選択。

・launch.json ファイルを作成します」をクリックします。

   python debugger

   python file

で lunch.jsonが出来上がる。  

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

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

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

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

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

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

コマンドプロンプトを起動し、FreeCADをインストールしたフォルダへ移動します。

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

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

> python -m pip install ptvsd

ちなみに私が実行した際、pipのバージョンによる警告が発生しました。

> WARNING: You are using pip version 21.1.1; however,
version 23.0.1 is available.
You should consider upgrading via the
'C:\Program Files\FreeCAD 0.20\bin\python.exe -m pip install --upgrade pip'
command.

そのため、メッセージにある通りアップグレードを実行。

> python -m pip install --upgrade pip

すると今度はこんなメッセージが。

> Installing collected packages: pip
? WARNING: The scripts pip.exe, pip3.8.exe and pip3.exe are installed in
'C:\Users\ユーザ名\AppData\Roaming\Python\Python38\Scripts'
which is not on PATH.
? Consider adding this directory to PATH or, if you prefer to suppress
this warning, use --no-warn-script-location.
Successfully installed pip-23.0.1
WARNING: You are using pip version 21.1.1; however, version 23.0.1 is
available.
You should consider upgrading via the
'C:\Program Files\FreeCAD 0.20\bin\python.exe -m pip install --upgrade pip'
command.

まぁPATHが通ってない的な記載がされていますね。

とりあえず「Successfully installed pip-23.0.1」と記載されているので、pipのインストールはおそらく成功したのではないかと思います。

というわけで再度『python -m pip install ptvsd』コマンドを実行しました。

すると今度はこんなメッセージが。

> C:\Program Files\FreeCAD 0.20\bin>python -m pip install ptvsd
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: ptvsd in
c:\users\ユーザ名\appdata\roaming\python\python38\site-packages (4.3.2)

上手くいっているように見えなくもない。

以前のFreeCAD 0.18のインストール時に記載したおまじない『--user』を入れて再度実行してみたところ以下のようなメッセージ。

> python -m pip install ptvsd --user

--userを入れない時と大体同じようです。

> Requirement already satisfied: ptvsd in
c:\users\ユーザ名\appdata\roaming\python\python38\site-packages (4.3.2)

とりあえず要求は満たされているとのことで、良しとして次に行きます。

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

FREECADとVSCODEを連携できるようにVS CODEを立ち上げます

注意は標準のPYTHON を使うのではなく上記でinstallしたPYTHON につなげなくてはなりません

ここではH:\FEM_FreeCAD 0.21\binにあるpythonにつなぐ必要がある

そのため VS CODEを開いて実行するマクロプログラムを開く。そして、一番下の所を見ると

使用プログラム(例python3.6.1.0とか)が表示されているので

ここを触ると、select interpliterの画面になる。初回は +interpreter pathで上記のH:\FEM_FreeCAD 0.21\binを入力 

この処置は一度だけで 次は選択すればよい様になる

いよいよ freecadを起動しマクロの実行の準備をする  

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

まずは最初に下記のサンプルコードを記載したSample.pyを作成します。

※ 作成する際はエディタを使って下記のコードを手入力してください。下記のコードをコピーしてエディタにそのまま貼り付けると文字コードの問題(?)で、後で処理を実行する際に『Syntax Error』とか『invalid character in identifier』といったわかりにくいエラーが頻発します。

#?-*-?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))

Sample.pyを作成したら、メニューの[マクロ - マクロ...]でSample.pyを選択し、実行を押下します。

実行後、FreeCADがフリーズ状態(他の操作ができない状態)になれば成功です。

フリーズ状態になっているのはデバッグが実行されるのをFreeCADが待っているわけで、壊れたわけではありません。落ち着きましょう。

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

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

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

print?(str(v1))

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

3.9. デバッグの開始

Visual Studio Code画面の一番左側に『虫と再生マークが合体したような』アイコンがあるので、クリックします。

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

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

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

3.10. デバッグ開始の確認

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

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

3.11. パラメータの確認

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

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

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

v1: Vector (1.0, 0.0, 0.0)

3.12. デバッグの終了

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

フリーズしていたはずのFreeCADがこれで操作できるようになったはずです。

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

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. まとめ

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

6. 最後に

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

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

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

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

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