DEBUGのメモ
序
おそらく情報系の人たちはDEBUGはいろいろなツールを使ってやるのだろうけど、 原子核の人たちは大概コードを読んで頭で考えるだけだったり、 printf大作戦だったりする気がする。
だけど原子核にもC++の流れがやっときていて、それに伴い不正なメモリアクセス、 メモリリーク等が頻発する様になっている。
これらを地道に対処していると結構大変なので少しデバッギングを勉強した。
その簡単なまとめ。
BUGの種類
まず、BUGの種類について大雑把にまとめる。
仕様バグ
数学バグ
物理バグ
プログラムバグ
仕様バグ
そもそも仕様がまちがっている。例えば計算時間が発散するような仕様だったり、 論理的にコーディングできなかったり。
僕等の場合は僕等の技量的に出来ないということもある。
あとはみんなで使うコードの場合は使う人のレベルや、どう使わせるか等を考える必要があるので一番難しいところかも。
これの対策はよく考えることのみ。
DEBUGツール
gdb, valgrind(メモリリークを追うに使った)
gdb program (gdb) run argument (gdb) bt
これするだけでabortしたところとかsegったところとか、そういうのが一発で分かるので みんな知っているべきだと思う。
もちろん、コンパイルするときに"-g"をつけるのを忘れずに。
ちなみにGeant4であればDEBUG modeでインストールしないといけない。
ROOTは常に-gが付いた状態になっている。
valgrindは気合でログを読む方法しかしらないのでんー。
ROOTはスタンドアローンのプログラムとしてコンパイルしたものをvalgrind上で実行しないといけないことに注意。