15
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2022

Day 22

VSCodeでElixirのデバックする方法

Last updated at Posted at 2022-12-21

はじめに

IO.inspect()にはお世話になってます。

エラーがでたら、その都度、IO.inspectを仕込んで、値確認こんなデバックよくやってます。

でも、デバッカーを使って、サクッと動作を見たい時もあります。

VSCodeでデバッカーを使う方法についての情報が見当たらなかったので、書いてみます。

Pythonのプログラムの場合、デバッカーを起動すると、選択中のPythonファイルが自動的に実行されてデバッカーが起動します。
しかし、Elixirの場合は、このような機能はありません。
ここに良い方法があったのでこの設定例を使って説明します。

環境設定

  • VSCodeにElixirLS をインストール

image.png

  • デバッカーの設定を開く(①を選択して、②の設定ボタンを押す)

image.png

launch.jsonがエディター画面に表示されます。その内容を、以下の内容に書き換えます。
configurationsに残したい設定がある場合は、適宜残してください。よくわからない場合は、丸ごと入れ替えで大丈夫です。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "inputs": [
        // This input allows us to prompt the VSCode user for arguments when we run a debug configuration.
        {
            "id": "runArgs",
            "type": "promptString",
            "description": "Enter arguments for `mix run -e`"
        }
    ],
     "configurations": [
        // This configuration runs `mix run -e ...` with arguments supplied by the user.
        {
            "type": "mix_task",
            "name": "mix run",
            "request": "launch",
            "task": "run",
            // Prompt the VSCode user for arguments with `"${input:runArgs}` and pass those along to `mix run -e ...`
            "taskArgs": [
                "-e", "${input:runArgs}"
            ],
            "startApps": true,
            "projectDir": "${workspaceRoot}",
        }
    ]
}

使い方

③の三角ボタンを押して、デバッカーを起動
入力欄に実行する関数を入力する(mix run -eの引数になります)

image.png

後は、VSCodeのデバッカーの操作方法で操作できます

変数の値を見てみる

PythonやJS、Cなどのデバッカー画面と比べると、変数名の表示がちょっと変わってます。
変数名@1のように@1が付加されてます。これは、拘束されると、この番号が増えていくようになってます。

次の例は、31行目で停止して、agentの値を表示した場合です。
左上のVARIABLES欄を見ると、agent@1と、agent@2があります。

agent@1は、この関数が呼び出された直後のagentです。
agent@2は、30行目を実行して拘束したagentです。
30行目のset_model()は、agent.modelを更新する処理をしています。
agent@1、agent@2比べてみると、modelの値がセットされている事を確認できます。

image.png

参考
https://gist.github.com/Tomboyo/ef8db1ed6beb2a88a8d5fb1d7ff3d76b

15
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?