最近、あるソルバーの動作を調べてもらいたいという注文があったので、久しぶりにコード検索・デバッグツールを使ってみようと思い立ちました。
しかし、数年前に使ったきりで、その当時からお世話になったPENGUINITISさんのサイトには今でも紹介されているんですが、情報が少々古くなってきており、この最新の環境だと、昔の方法がそのまま使えない事項もあったので、ここにDEXCS2014(OpenFOAM-2.3.x on ubuntu-14.04)の場合、どうであったかを取りまとめておくこととしました。
なお、ここで取り扱うのは、本家のWikiページ(HowTo debugging)にあるような、コマンドライン入力でgdbなんかを使ってシコシコやるっていうのではなく、あくまでGUIツールを使ってやる方法です。
GUIデバッグツール
これまでに使用したことのあるデバッグツールは以下の3つです。
- NetBeans
- KDbg
- Eclipse
ソースコードを静的に探索するならNetBeans、動的というかステップ実行したり、変数の内容を確認したりの、いわゆるデバッグするにはKDbgがお手軽に使える反面、これらのツールで両方共出来るということはない。片やEclipseではどちらも出来るのだが、設定が面倒だし重いとかあって、お手軽でないという、どれも一長一短あって、用途に応じて使い分けるしかないのかなぁ・・・というのがこれまでの個人的な結論でありました。
そこで、それぞれのツールについて、DEXCS2014で動かす方法とその結果について以下に記しておきます。
NetBeans
現時点での最新版 IDE 8.02が使えました。PENGUINITISさんのサイトでは、IDE 7.2 for OF-2.1.1 の説明で、当時は日本語表示がうまく使えなかったようですが、現在は問題なく使えます。言語設定(LANG=…)の必要はありません(英語で使いたい人は別ですが)。また、富山勉強会のサイトにも、NetBeans設定方法(IDE 7.4 for OF-2.2.2)について取りまとめられており、基本的にはこれらの方法と同じで大丈夫でした。
ソースファイル一式を丸ごと解析するので、最初はちょっと時間がかかりますが、解析が終われば、上の図に示すような感じで、キーワードの上でマウス右クリックを使って、さほどストレスなくコードの中味をたどることが出来るようになります。
但し、上の図の例でいうと、ソース行番号の欄で、何やらマークが付けられた行、
turbulence->correct();
は、ライブラリの中味まではたどることが出来ないということです。ただ、ここは後で述べるEclipseのようにコンパイル環境の設定までは実施していないのがそもそもの原因なので、そこが出来ていれば多分可能なんでしょう。そのやり方が判れば・・・なんですがね。(判りました⇒追記参照)
KDbg
残念ながら、KDbgはDEXCS2014上では動きませんでした。Synapticパッケージマネージャからはインストール出来るようになっていたのですが、インストール出来はしたものの、実行しようとするとSegmentation fault です。そもそもランチャー用のアイコンも実体がありませんでした。
ソースコードからインストールする方法も試してみましたが、KDEのヘッダーが何チャラというエラーメッセージで、要するにちゃんとしたKDE環境でないと動かないということらしい。多分、ubuntu系なら、Kubuntuを使えということなんでしょう。
とはいうものの、DEXCS2013(OS は、mint 13、実質ubuntu-12.04)の古い環境で、OpenFOAM-2.3.1(注)を動かすことは出来たので、ここで他のツールとの比較という観点から、ちょっとだけ紹介。
(注)本当は、OpenFOAM-2.3.xを調べたかったのですが、拙宅マシン(mint 13 / ubuntu-12.04)で、DEXCS2014公開当時の2.3.xはコンパイル出来ていたのですが、拙宅マシンに当時の版は残っておらず、更新した最新版2.3.xは、不完全なコンパイルしか出来なくなってしまっていたので、2.3.1で検証しました。
基本的には、PENGUINITISさんのサイトに記載してある方法でインストールから、ブレークポイントを設定したり、ステップ実行が出来るようになります。
そこで、たとえばNetBeansの静的な解析でたどれなかった箇所にブレークポイントを置いてデバッグを「実行」すると、その箇所で待ち状態になってくれます。
ここで「ステップ イントゥ」を何回か(この場合は4回)押すと…
となって、所望のライブラリファイル(この例ではkEpsilonを使っているので、kEpsilon.C)にたどり着くことが出来るという次第です。
チャチャッと調べるには、このツールがなかなか便利なだけに、DEXCS2014で使えないのが残念です。
Eclipse
はっきり言って、これはややこしい。
「openfoam eclipse debug 」あたりでググっても、拙作記事が結構上位に出てくるくらいで、本家の方にも新しい情報がない。結局、この拙作記事からたどれる、これまた拙作のインストール方法やら、使用(コンパイルから実行までの)方法やらを頼りに、ほぼ同じ方法で、DEXCS2014に環境構築するところまでは出来ました。
コードを検索するあたりは、Ctrlキーを押しながらマウスクリックで、
簡単にたどれるようにはなる。
また、Eclipseの上でコンパイルする方法も判っていたので、これも同じやり方(といってもかなり試行錯誤でやり直したが)でなんとかコンパイル出来るようにはなった。
ただこの時点でも、ライブラリの中味までたどれないのはNetBeansと同じです。
次にデバッグ用のケースファイルを作成してデバッグを実行しますが、設定を間違えていなければ、次のメッセージ画面が現れます。
問題は、これが出てくるまでに、異常に長い時間(数分というオーダー)がかかってしまう事でした。2回目以降はそうでもないようですが。
何はともあれ、デバッグが開始されれば、KDbgと同じように、ブレークポイントを設定⇒Step Into(F5) で、所望のライブラリまでたどり着くことは出来ました。
なお、以前の方法と「ほぼ同じ」やり方と記しましたが、違う点はgdbをインストールし直す点です。以前の方法では、標準のgdbをアンインストールして、古いヴァージョン(gdb-6.8)を入れ直す必要がありました。今回もそれを試みましたが、残念ながら出来ませんでした。コンパイルすると…
In file included from amd64-linux-nat.c:26:0:
linux-nat.h:63:18: error: field ‘siginfo’ has incomplete type
struct siginfo siginfo;
^
make[2]: *** [amd64-linux-nat.o] エラー 1
というエラーで、ググったところ、それらしい情報もいくつか見かけましたけど、解決策には到らずでした。
デバッガーが起動するまでにやたら時間がかかるのはこのことが原因なのかもしれません。ここ(gdbを入れ直すところ)はスキップ、もしくは最新版を入れ直すなどもやってみて、違いがあるような、無いような・・・よく判りません。
まぁ、とりあえず動くようになって、今回調べたいコードの探索も出来るようにはなっており、これ以上時間をかけるのは本筋ではないので、これにて調査終了としました。
追記(2015/1/30)
NetBeansでデバッグまでは出来ていないと記しましたが、本記事を見たFaceBookの読者さん(富山県立大の中川慎二先生)から情報を頂きました。
情報はこちら(⇒ http://eddy.pu-toyama.ac.jp/bb7e59f23-126/#_126)
早速確認させていただきました。
やはり、コンパイルのやり方にひと工夫(wmakeを変更)が必要だったようですが、出来てしまえば、あとは簡単でした。
英語メニューでの解説を日本語メニューで読み替えるのに少し戸惑いましたが、Eclipseに比べるとメニューがそれほど込み入っておらず、メニュー探しに手間取ったり、間違えたりすることは断然少なく済みそうです。
安定性の面では、もう少し使い込まないことにはわかりませんが、これもEclipseとの比較でOKなら、Eclipseは不要になりますね。