coverstoryでカバレッジを見る


gcovのビューアと言えばcoverstoryが有る。これはMacOS X専用だがすぐ使えるので便利。
moshの場合は多少注意点が有って、

  • -DUSE_XCODEをCFLAGSとCXXFLAGSに含める。
  • -O0をCFLAGSに含める(今は必要ないかも)

必要が有る。USE_XCODEは、computed gotoの使用を抑制する。XCode付属のコンパイラmoshのcomputed gotoの使用方法と相性が悪いらしいのでこのようなオプションを用意している。
つまり、configureを次のように起動して、

./configure CFLAGS="-DUSE_XCODE -I/usr/local/include -L/usr/local/lib -fprofile-arcs -ftest-coverage -O0" \
   CXXFLAGS="-DUSE_XCODE -fprofile-arcs -ftest-coverage -O0"

後はmake、make check、make testして、coverstoryでmakeしたディレクトリを開く。
欲を言えば、Schemeコード側のカバレッジも取りたい。。単純にはCPS変換を掛けてしまえばclosure一つが基本ブロックに相当するので、実行したclosureのIDさえ追跡できれば良い。
地味に難しいのはScheme、というかLLは一般的に行辺りのコード密度が高いので、行ベースのUIではカバレッジを見せづらいこと。Scheme固有の事情としては、マクロで生成されたコードの扱いもある。