murawaki の雑記

はてなグループから移転してきました

Valgrind をさわってみた

常駐型サーバーのデバッグ手法という記事を読んで知ったこと。

Valgrindメモリリークの発見に使えるツールだってことぐらいは知っていたけど、デバッグオプションをつけてコンパイルしなくても動くし、スクリプト言語に対してでも動くというのは驚き。もちろん、発見した問題が発生について、人間が見て意味のあるメッセージを生成できるかは別問題。

少し考えてみれば、低レベルでエミュレートしているから当然だ。スクリプト言語は処理系をまるごとエミュレートすればよい。デバッグ情報をつけなくても、ELF のシンボルテーブルを見ればおおよその場所はわかるだろう。

試しに自分の perl スクリプトを Valgrind にかけてみた。ネイティブのライブラリや XS の糊付け部分に問題がないかと思って。そうすると、

X bytes in Y blocks are definitely lost...

メモリリークを示すメッセージが返ってきた。ソースをぱっと見ただけでは分からなかったが、よく調べると確かにリークしていた。

素人的に面白いと思ったのは、probably lost という出力も返すこと。私の勝手な想像では、こういう分野では、「安全な部品を安全な操作で組み立てたらどこまで行っても安全」という砂場の世界を人工的に作って、それを型などを使って理論的に保証しようとするものだと思っていた。そうじゃなくて、既にある汚い世界と格闘するというのは自然言語処理と似ているかもしれない。ちゃんと調べればまた別の感想が出てくるかもしれないけど、備忘録的に記しておく。