OpenFOAM【VSCodeでdbg】

WSL+VSCode環境でOpenFOAMデバッグの環境構築です。

デバッグオプションでコンパイル

環境変数 $WM_COMPILE_OPTIONをDebugに変更します。その前に一応、現在の状態を確認。

$ echo $WM_COMPILE_OPTION
Opt

$WM_PROJECT_DIR/etc/bashrc内を修正します。readonlyオプション付きなのでsudoで無理やり修正。

$ sudo vim $WM_PROJECT_DIR/etc/bashrc
#- Optimised, debug, profiling:
#    WM_COMPILE_OPTION = Opt | Debug | Prof
#export WM_COMPILE_OPTION=Opt
export WM_COMPILE_OPTION=Debug

設定の反映、確認をします。

$ source $WM_PROJECT_DIR/etc/bashrc
$ echo $WM_COMPILE_OPTION
Debug

続いて、$WM_PROJECT_DIR/Allwmakeを実行します。が、普通に./Allwmakeを実行しようとすると、permissionが無いと言われて怒られました。sudo -Eのオプションも利かなかったので、ちょっと回りくどかったですが、rootで入り直して実行しました。

$ su -
# cd $WM_PROJECT_DIR/etc/bashrc
# source bashrc
# ./$WM_PROJECT_DIR/Allwmake

bashrcをもう一度設定変更することを忘れない。なお、上のコマンドは環境変数が反映されないと利きません(ディレクトリの場所を直打ちしましょう)。

途中でエラーが出ました。

qhelpgenerator: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qhelpgenerator': No such file or directory

qt4のプログラムが無いようでした。qt5はあった(/usr/lib/x86_64-linux-gnu/qt5/bin/にqhelpgeneratorがあった)ので、これをコピーして/qt4/binにつっ込んだらうまくいきました(これでいいのか、という気はするけど、、、)

vscodeでのgdb設定(launch.jsonの修正)

launch.jsonを下記のように修正しました。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) openfoam",
            "type": "cppdbg",
            "request": "launch",
            "program": "実行ファイルの配置場所/myFoam",
            "args": [],
            "stopAtEntry": true,
            "cwd": "実行ファイルの配置場所",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

このへんも参考に。

FrontISTR【VSCodeデバッガ】 - FEMとFortranが好きな人の技術のメモ

コンパイルデバッグ

プログラムを修正したら、wmakeでコンパイルします。環境変数が更新されているはずなので、デバッグモードでコンパイルできます。あとはvscodeデバッグをするとよいのです。デバッグモードで実行するときは、結構時間かかります。

f:id:matsuo_san:20200406181036p:plain

これでok。

追記

以下エラーが出ました(デバッグモードだから?)。タイポのようなので、指示通り修正

expressions/exprResult/exprResultGlobals.C:206:58: error: ‘const class Foam::HashTable<Foam::expressions::exprResultGlobals::Table>’ has no member named ‘sortToc’; did you mean ‘sortedToc’?
                 << "Known global scopes: " << variables_.sortToc() << nl;
                                                          ^~~~~~~
                                                          sortedToc

[OpenFOAM.org] Compiling of Openfoam fails with Debug switch -- CFD Online Discussion Forums

参考にしました。

OpenFOAMをデバッグモードでコンパイルする(Ubuntu 14.04 LTS) - Qiita

[OpenFOAM/foam-extend] wmakeのコンパイルフラッグを変更する - Qiita

PENGUINITIS - OpenFOAM のデバッグ