1

当使用 valgrind 检查内存泄漏时,我遇到了一个非常奇怪的问题。在 32 位 linux 上,泄漏堆栈信息非常清晰,例如:

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

但是在 x64 linux 上,我只能得到??? 像这样的信息:

    ==31031== 1 个块中的 8 个字节在 2,210 的丢失记录 196 中肯定丢失了
    ==31031== 在 0x4A0646F:malloc (vg_replace_malloc.c:236)
    ==31031== 由 0x46AF78: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x46B016: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x421F99: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x42C240: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x42D731: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x42FC65: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x465C01: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x463DB6: ??? (在 /opt/usr/local/sbin/Server 中)
    ==31031== 由 0x3116A1D993 :(在 main 下方)(在 /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 回答