VSCodeでGDBデバッグするときに標準入力を渡す(Nimで試す)


デバッグするときに標準入力渡せない問題

普段VSCodeでNimを書いていると、ちょくちょくデバッグしたいな〜となります。そこでNative Debugを入れてGDBでデバッグしていたのですが、標準入力を受け付けてくれない問題がありました(もしかしたら僕が知らないだけで方法があるのかもしれません)。
流石にしんどいのでファイルに入力を記述し、パイプで渡そうと思ったのでその設定メモ。

僕はNimですが、おそらくC/C++あたりでも同じなのではないでしょうか。

settings.jsonに設定を記述

今回はプロジェクトに関わらずグローバルで設定を反映させたかったので、settings.jsonに記述しています。個別に設定したい場合はlaunch.jsonに同様のことを記述すればよいはずです。

以下僕の設定ファイルです。arguments以外は適当にVSCodeでNimのデバッグ(ステップ実行)あたりを参考にして書いてください。

settings.json
{
    ...他の設定とか
    "launch": {
        "configurations": [
            {
                "name": "Nim Debug",
                "type": "gdb",
                "request": "launch",
                "arguments": "< ${fileBasenameNoExtension}.input",
                "target": "${fileBasenameNoExtension}",
                "cwd": "${fileDirname}",
                "valuesFormatting": "parseText"
            }
        ],
        "compounds": []
    }
}

こんな感じで、settings.jsonの下の方にlaunch以降を追記してあげます。
この設定では、test.nimがあったらコンパイルによって生成しておいたバイナリtestを実行し、test.inputを標準入力として渡しています。要は"arguments": "< ${fileBasenameNoExtension}.input"の部分で、引数として< [nimファイル名から拡張子を除いた文字列].inputを渡すことで、パイプで入力を渡しているわけですね。

実際にデバッグ


なんだかいい感じにできてますね。よかったよかった。

参考