1

valgrind を使用してメモリ リークをチェックすると、非常に奇妙な問題が発生します。32 ビット Linux では、リーク スタック情報は次のように非常に明確です。

    ==10650== by 0x8130FD3: SFNTSetContactServer
    ==10650== by 0x81106CA: CLibLicense::GetOneLicense(std::string&, void*&)
    ==10650== by 0x81108C2: CLibLicense::StartingGet(void*&)
    ==10650== by 0x810F01A: CLibLicense::GetLicense()
    ==10650== by 0x810DEBB: CLicenseManager::DoGetLicense(void*, unsigned int)

しかし、x64 Linux では、 ???しか取得できません。このような情報:

    ==31031== 2,210 件中 196 件の損失レコードで 1 ブロックの 8 バイトが確実に失われています
    ==31031== 0x4A0646F: malloc (vg_replace_malloc.c:236)
    ==31031== by 0x46AF78: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x46B016: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x421F99: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x42C240: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x42D731: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x42FC65: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x465C01: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x463DB6: ??? (/opt/usr/local/sbin/Server 内)
    ==31031== by 0x3116A1D993: (メインの下) (/lib64/libc-2.5.so 内)

valgrind FAQ にあるように、プログラムは dlopen/dlclose を使用しません。

更新 1、ファイルの統計情報を追加

    ファイルサーバー
    サーバー: ELF 64 ビット LSB 実行可能ファイル、AMD x86-64、バージョン 1 (SYSV)、GNU/Linux 2.6.9 用、動的にリンク (共有ライブラリを使用)、GNU/Linux 2.6.9 用、ストリップなし

どんなコメントでも大歓迎です!

4

1 に答える 1

1

プログラムからシンボルを削除したようです。

于 2011-08-30T08:02:51.380 に答える