namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: memory leak on libnmz



Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:

># src/.libs で namazu コマンドを実行して実験したのだけど、方
># 法はこれで正しいのだろうか?

これ、なんとなく変だなと思っていたら src/.libs ディレクトリ
の namazu コマンドは /usr/local/lib/libnmz.so.0 をリンクして
いるようです。

  % ldd namazu 
        libdl.so.1 => /lib/libdl.so.1 (0x4000c000)
        libnmz.so.0 => /usr/local/lib/libnmz.so.0 (0x4000f000)
        libm.so.5 => /lib/libm.so.5 (0x40032000)
        libc.so.5 => /lib/libc.so.5 (0x4003b000)

つまり、一度 make install して /usr/local/lib/libnmz.so.0 を
インストールし直さないと nmz/*.c を修正したコードは実行結果
に反映されないみたい。これは不便です。

そこで、 src にあるシェルスクリプトの namazu コマンド 
(libnmz を shared library としてリンクするため) を実行すると、 
src/.libs に lt-namazu という実行ファイルが作成されます。こ
ちらの方は nmz/.libs/libnmz.so.0 をリンクしています。

  % ldd ./lt-namazu 
        libdl.so.1 => /lib/libdl.so.1 (0x4000c000)
        libnmz.so.0 => /home/satoru/cvs/namazu/nmz/.libs/libnmz.so.0 (0x4000f000)
        libm.so.5 => /lib/libm.so.5 (0x40032000)
        libc.so.5 => /lib/libc.so.5 (0x4003b000)

というわけで、 ccmalloc を使ってデバッグするときは次の手順に
従えばいいようです。

  1. src ディレクトリの namazu を 1回だけ実行する
  2. src/.libs ディレクトリの  lt-namazu を実行してテストする

ちなみに、 src ディレクトリにあるシェルスクリプトの namazu 
コマンドを実行すると、 ccmalloc は次のような警告を出します。
symbol が取得できないため出力は情報の少ないものになります。

  trying to find executable in current directory ...
  Could not find an executable with valid symbols
  Specify it with the `file' command
  in the startup file `~/.ccmalloc'
  or link `a.out' to this executable!


p.s.
Red Hat 6.1 の環境で autogen.sh && make したら libnmz.so を
作りませんでした。なぜだろう??

-- Satoru Takabayashi