GDB調試內存泄露(CentOS7 實戰記錄)

首先感謝《一種定位內存泄露的方法(Linux)》這片文章。基本思路是一致的。
本文追加了對於後續內存如何查看對象數據的方法。

先POST一下原來第三方文章,主要關注其思想理念:


目的:
本文是《一種定位內存泄露的方法(Solaris)》對應的Linux版本,調試器使用gdb。主要介紹實例部分。其他請見《一種定位內存泄露的方法(Solaris)》。

模擬new失敗的程序:

#include <stdexcept>
class ABC
{
public:
        virtual ~ABC(){}
        int i;
        int j;
};

void f()
{
        for (int i = 0; i < 1000; ++i)
        {
                ABC* p = new ABC;
        }
        throw std::bad_alloc();
}

int main()
{
        f();
        return 0;
}

1) 編譯運行此段代碼。產生一個core文件
2) 用gdb打開這個core文件:

gdb a.out core
(gdb) run
Starting program: /test/new_fail/a.out
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Program received signal SIGABRT, Aborted.
0x00007ffff733f645 in raise () from /lib64/libc.so.6
(gdb) info proc
process 10683
cmdline = '/test/new_fail/a.out'
cwd = '/test/new_fail'
exe = '/test/new_fail/a.out'
(gdb) shell pmap 10683
10683: a.out
START               SIZE     RSS     PSS   DIRTY    SWAP PERM MAPPING
0000000000400000      4K      4K      4K      0K      0K r-xp /test/new_fail/a.out
0000000000600000      4K      4K      4K      4K      0K r--p /test/new_fail/a.out
0000000000601000      4K      4K      4K      4K      0K rw-p /test/new_fail/a.out
0000000000602000    132K     32K     32K     32K      0K rw-p [heap]
…(略)
Total:            11468K   1048K    684K    180K      0K

360K writable-private, 11108K readonly-private, 0K shared, and 1048K referenced

可以看到heap空間的起始地址是0x0000000000602000,共132K字節,即132*1024=135168字節。
3) 因爲是64位應用程序,所以指針佔8字節。所以需要遍歷的指針個數爲135168/8=16896。
4) 將結果輸出到日誌文件gdb.txt中:

(gdb) set height 0
(gdb) set logging on
Copying output to gdb.txt.
(gdb) x/16896a 0x0000000000602000

gdb.txt的內容:

0x602000:       0x0     0x21
0x602010:       0x400b30 <_ZTV3ABC+16>  0x0
0x602020:       0x0     0x21
0x602030:       0x400b30 <_ZTV3ABC+16>  0x0
….

5) 過濾gdb.txt:

awk '{print $2"/n"$3}' gdb.txt|C++filt|grep vtable>gdb_vtable.txt

gdb_vtable.txt的內容爲:

<vtable for ABC+16>
<vtable for ABC+16>
<vtable for ABC+16>
<vtable for ABC+16>

6) 將gdb_vtable.txt的內容導入到SQLServer中(如果記錄不多,可以用Excel代替)。表名爲gdb_vtable,第一列Col001爲符號。對其分組求和:

select Col001, count(1) quantity from gdb_vtable
group by Col001
order by quantity desc

結果爲:

Col001                                                                                    quantity
<vtable for ABC+16>                                                              1000
<vtable for std::bad_alloc@@GLIBCXX_3.4+16>          

可知core裏有1000個ABC,遍歷使用ABC的代碼,可知存在泄漏。


參考上述的文章,我們進行實戰排查並記錄全過程。

[root@mcu_rrs sips]# ps faxu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    314   0:00 [kthreadd]
……
root      3592 11.8 25.3 9110048 2009168 ?     Sl   314 179:33  \_ ./H323Gateway -x -c -i ../etc/H323Gateway.conf -m s.cgw.10.35.10.53 -n s.h323gw.10.35.10.53 -b tcp://127.0.0.1:10882
……

可以看到H323Gateway進程RSS巨大,明顯存在內存泄漏

[root@mcu_rrs sips]# pmap 3592
3592:   ./H323Gateway -x -c -i ../etc/H323Gateway.conf -m s.cgw.10.35.10.53 -n s.h323gw.10.35.10.53 -b tcp://127.0.0.1:10882
0000000000400000   1380K r-x-- H323Gateway
0000000000759000      4K r---- H323Gateway
000000000075a000     12K rw--- H323Gateway
000000000075d000     16K rw---   [ anon ]
0000000002148000   2604K rw---   [ anon ]
00007f6eac000000  54268K rw---   [ anon ]
00007f6eaf4ff000  11268K -----   [ anon ]
00007f6eb4000000  65536K rw---   [ anon ]
00007f6ebc000000  65536K rw---   [ anon ]
00007f6ec4000000  65536K rw---   [ anon ]
00007f6ecc000000  65536K rw---   [ anon ]
00007f6ed4000000  65536K rw---   [ anon ]
00007f6edc000000  65536K rw---   [ anon ]
00007f6ee4000000  65536K rw---   [ anon ]
00007f6eec000000  65536K rw---   [ anon ]
00007f6ef4000000  65536K rw---   [ anon ]
00007f6efc000000  65536K rw---   [ anon ]
00007f6f04000000  65536K rw---   [ anon ]
00007f6f0c000000  65536K rw---   [ anon ]
00007f6f14000000  65536K rw---   [ anon ]
00007f6f1c000000  65536K rw---   [ anon ]
00007f6f24000000  65536K rw---   [ anon ]
00007f6f2c000000  65536K rw---   [ anon ]
00007f6f34000000  65536K rw---   [ anon ]
00007f6f3c000000  65536K rw---   [ anon ]
00007f6f44000000  65536K rw---   [ anon ]
00007f6f4c000000  65536K rw---   [ anon ]
00007f6f54000000  65536K rw---   [ anon ]
00007f6f5c000000  65536K rw---   [ anon ]
00007f6f64000000  65536K rw---   [ anon ]
00007f6f6c000000  65536K rw---   [ anon ]
00007f6f74000000  65536K rw---   [ anon ]
00007f6f7c000000  65536K rw---   [ anon ]
00007f6f84000000  65536K rw---   [ anon ] <---- 本次以此條爲查看樣本
00007f6f8c000000  65536K rw---   [ anon ]
00007f6f94000000  65536K rw---   [ anon ]
00007f6f9c000000  65536K rw---   [ anon ]
00007f6fa4000000  65536K rw---   [ anon ]
00007f6fac000000  65536K rw---   [ anon ]
00007f6fb4000000  65536K rw---   [ anon ]
00007f6fbc000000  65536K rw---   [ anon ]
00007f6fc4000000  65536K rw---   [ anon ]
00007f6fcc000000  65536K rw---   [ anon ]
00007f6fd4000000  65536K rw---   [ anon ]
00007f6fdc000000  65536K rw---   [ anon ]
00007f6fe4000000  65536K rw---   [ anon ]
00007f6fec000000  65536K rw---   [ anon ]
00007f6ff4000000  65536K rw---   [ anon ]
00007f6ffc000000  65536K rw---   [ anon ]
00007f7004000000  65536K rw---   [ anon ]
00007f700c000000  65536K rw---   [ anon ]
00007f7014000000  65536K rw---   [ anon ]
00007f701c000000  65536K rw---   [ anon ]
00007f7024000000  65536K rw---   [ anon ]
00007f702c000000  65536K rw---   [ anon ]
00007f7034000000  65536K rw---   [ anon ]
00007f703c000000  65536K rw---   [ anon ]
00007f7044000000  65536K rw---   [ anon ]
00007f704c000000  65536K rw---   [ anon ]
00007f7054000000  65536K rw---   [ anon ]
00007f705c000000  65536K rw---   [ anon ]
00007f7064000000  65536K rw---   [ anon ]
00007f706c000000  65536K rw---   [ anon ]
00007f7074000000  65536K rw---   [ anon ]
00007f707c000000  65536K rw---   [ anon ]
00007f7084000000  65536K rw---   [ anon ]
00007f708c000000  65536K rw---   [ anon ]
00007f7094000000  65536K rw---   [ anon ]
00007f709c000000  65536K rw---   [ anon ]
00007f70a4000000  65536K rw---   [ anon ]
00007f70ac000000  65536K rw---   [ anon ]
00007f70b4000000  65536K rw---   [ anon ]
00007f70bc000000  65536K rw---   [ anon ]
00007f70c4000000  65536K rw---   [ anon ]
00007f70cc000000  65536K rw---   [ anon ]
00007f70d4000000  65536K rw---   [ anon ]
00007f70dc000000  65536K rw---   [ anon ]
00007f70e4000000  65536K rw---   [ anon ]
00007f70ec000000  65536K rw---   [ anon ]
00007f70f4000000  65536K rw---   [ anon ]
00007f70fc000000  65536K rw---   [ anon ]
00007f7104000000    132K rw---   [ anon ]
00007f7104021000  65404K -----   [ anon ]
00007f710c000000    304K rw---   [ anon ]
00007f710c04c000  65232K -----   [ anon ]
00007f7110000000    132K rw---   [ anon ]
00007f7110021000  65404K -----   [ anon ]
00007f7114000000    132K rw---   [ anon ]
00007f7114021000  65404K -----   [ anon ]
00007f7118000000    132K rw---   [ anon ]
00007f7118021000  65404K -----   [ anon ]
00007f711c000000    152K rw---   [ anon ]
00007f711c026000  65384K -----   [ anon ]
00007f7120000000    132K rw---   [ anon ]
00007f7120021000  65404K -----   [ anon ]
00007f7124000000    352K rw---   [ anon ]
00007f7124058000  65184K -----   [ anon ]
00007f7128000000   5836K rw---   [ anon ]
00007f71285b3000  59700K -----   [ anon ]
00007f712c000000  11280K rw---   [ anon ]
00007f712cb04000  54256K -----   [ anon ]
00007f7130000000    132K rw---   [ anon ]
00007f7130021000  65404K -----   [ anon ]
00007f7134000000    132K rw---   [ anon ]
00007f7134021000  65404K -----   [ anon ]
00007f7138000000    132K rw---   [ anon ]
00007f7138021000  65404K -----   [ anon ]
00007f713c000000    132K rw---   [ anon ]
00007f713c021000  65404K -----   [ anon ]
00007f7140000000    312K rw---   [ anon ]
00007f714004e000  65224K -----   [ anon ]
00007f7144000000    296K rw---   [ anon ]
00007f714404a000  65240K -----   [ anon ]
00007f7148000000    132K rw---   [ anon ]
00007f7148021000  65404K -----   [ anon ]
00007f714c000000    372K rw---   [ anon ]
00007f714c05d000  65164K -----   [ anon ]
00007f7150000000   5836K rw---   [ anon ]
00007f71505b3000  59700K -----   [ anon ]
00007f7154000000  11196K rw---   [ anon ]
00007f7154aef000  54340K -----   [ anon ]
00007f7158000000    152K rw---   [ anon ]
00007f7158026000  65384K -----   [ anon ]
00007f715c000000    276K rw---   [ anon ]
00007f715c045000  65260K -----   [ anon ]
00007f7160000000    132K rw---   [ anon ]
00007f7160021000  65404K -----   [ anon ]
00007f7164000000   5836K rw---   [ anon ]
00007f71645b3000  59700K -----   [ anon ]
00007f7168000000    132K rw---   [ anon ]
00007f7168021000  65404K -----   [ anon ]
00007f716c000000  11276K rw---   [ anon ]
00007f716cb03000  54260K -----   [ anon ]
00007f7170000000    132K rw---   [ anon ]
00007f7170021000  65404K -----   [ anon ]
00007f7174000000  65536K rw---   [ anon ]
00007f7178000000    372K rw---   [ anon ]
00007f717805d000  65164K -----   [ anon ]
00007f717c000000  65536K rw---   [ anon ]
00007f7180000000    292K rw---   [ anon ]
00007f7180049000  65244K -----   [ anon ]
00007f7184000000    132K rw---   [ anon ]
00007f7184021000  65404K -----   [ anon ]
00007f7188000000    312K rw---   [ anon ]
00007f718804e000  65224K -----   [ anon ]
00007f718c000000    132K rw---   [ anon ]
00007f718c021000  65404K -----   [ anon ]
00007f7190000000    308K rw---   [ anon ]
00007f719004d000  65228K -----   [ anon ]
00007f7194000000    132K rw---   [ anon ]
00007f7194021000  65404K -----   [ anon ]
00007f7198000000    132K rw---   [ anon ]
00007f7198021000  65404K -----   [ anon ]
00007f719c000000    132K rw---   [ anon ]
00007f719c021000  65404K -----   [ anon ]
00007f71a0000000    132K rw---   [ anon ]
00007f71a0021000  65404K -----   [ anon ]
00007f71a4000000    692K rw---   [ anon ]
00007f71a40ad000  64844K -----   [ anon ]
00007f71a8000000    352K rw---   [ anon ]
00007f71a8058000  65184K -----   [ anon ]
00007f71ae582000      4K -----   [ anon ]
00007f71ae583000   2048K rw---   [ anon ]
00007f71ae783000      4K -----   [ anon ]
00007f71ae784000   2048K rw---   [ anon ]
00007f71ae984000      4K -----   [ anon ]
00007f71ae985000    256K rw---   [ anon ]
00007f71ae9c5000      4K -----   [ anon ]
00007f71ae9c6000   1024K rw---   [ anon ]
00007f71aeac6000      4K -----   [ anon ]
00007f71aeac7000    256K rw---   [ anon ]
00007f71aeb07000      4K -----   [ anon ]
00007f71aeb08000    256K rw---   [ anon ]
00007f71aeb48000      4K -----   [ anon ]
00007f71aeb49000    256K rw---   [ anon ]
00007f71aeb89000      4K -----   [ anon ]
00007f71aeb8a000    256K rw---   [ anon ]
00007f71aebca000      4K -----   [ anon ]
00007f71aebcb000    256K rw---   [ anon ]
00007f71aec7e000      4K -----   [ anon ]
00007f71aec7f000    256K rw---   [ anon ]
00007f71aecbf000      4K -----   [ anon ]
00007f71aecc0000   1024K rw---   [ anon ]
00007f71aedc0000      4K -----   [ anon ]
00007f71aedc1000    256K rw---   [ anon ]
00007f71aee01000      4K -----   [ anon ]
00007f71aee02000   2048K rw---   [ anon ]
00007f71af003000      4K -----   [ anon ]
00007f71af004000    256K rw---   [ anon ]
00007f71af044000      4K -----   [ anon ]
00007f71af045000    256K rw---   [ anon ]
00007f71af085000      4K -----   [ anon ]
00007f71af086000    256K rw---   [ anon ]
00007f71af0c6000      4K -----   [ anon ]
00007f71af0c7000    256K rw---   [ anon ]
00007f71af107000      4K -----   [ anon ]
00007f71af108000    256K rw---   [ anon ]
00007f71af148000      4K -----   [ anon ]
00007f71af149000    256K rw---   [ anon ]
00007f71af189000      4K -----   [ anon ]
00007f71af18a000    256K rw---   [ anon ]
00007f71af1ca000      4K -----   [ anon ]
00007f71af1cb000   1024K rw---   [ anon ]
00007f71af2cb000      4K -----   [ anon ]
00007f71af2cc000   2048K rw---   [ anon ]
00007f71af4cc000      4K -----   [ anon ]
00007f71af4cd000   2048K rw---   [ anon ]
00007f71af6cd000      4K -----   [ anon ]
00007f71af6ce000   2048K rw---   [ anon ]
00007f71af8fd000      4K -----   [ anon ]
00007f71af8fe000    256K rw---   [ anon ]
00007f71af93e000      4K -----   [ anon ]
00007f71af93f000    256K rw---   [ anon ]
00007f71af97f000      4K -----   [ anon ]
00007f71af980000    256K rw---   [ anon ]
00007f71af9c0000      4K -----   [ anon ]
00007f71af9c1000    256K rw---   [ anon ]
00007f71afa01000      4K -----   [ anon ]
00007f71afa02000    256K rw---   [ anon ]
00007f71afa42000      4K -----   [ anon ]
00007f71afa43000    256K rw---   [ anon ]
00007f71afa83000      4K -----   [ anon ]
00007f71afa84000    256K rw---   [ anon ]
00007f71afac4000      4K -----   [ anon ]
00007f71afac5000    256K rw---   [ anon ]
00007f71afb05000      4K -----   [ anon ]
00007f71afb06000    256K rw---   [ anon ]
00007f71afb46000      4K -----   [ anon ]
00007f71afb47000    256K rw---   [ anon ]
00007f71afb87000      4K -----   [ anon ]
00007f71afb88000    256K rw---   [ anon ]
00007f71afbc8000      4K -----   [ anon ]
00007f71afbc9000    256K rw---   [ anon ]
00007f71afdff000      4K -----   [ anon ]
00007f71afe00000   2048K rw---   [ anon ]
00007f71b0000000    132K rw---   [ anon ]
00007f71b0021000  65404K -----   [ anon ]
00007f71b4000000    156K rw---   [ anon ]
00007f71b4027000  65380K -----   [ anon ]
00007f71b8000000    136K rw---   [ anon ]
00007f71b8022000  65400K -----   [ anon ]
00007f71bc000000   6036K rw---   [ anon ]
00007f71bc5e5000  59500K -----   [ anon ]
00007f71c0000000    132K rw---   [ anon ]
00007f71c0021000  65404K -----   [ anon ]
00007f71c4000000    132K rw---   [ anon ]
00007f71c4021000  65404K -----   [ anon ]
00007f71c8000000    132K rw---   [ anon ]
00007f71c8021000  65404K -----   [ anon ]
00007f71cc000000    132K rw---   [ anon ]
00007f71cc021000  65404K -----   [ anon ]
00007f71d0000000    132K rw---   [ anon ]
00007f71d0021000  65404K -----   [ anon ]
00007f71d4000000  58612K rw---   [ anon ]
00007f71d793d000   6924K -----   [ anon ]
00007f71d8000000  65536K rw---   [ anon ]
00007f71dc000000    132K rw---   [ anon ]
00007f71dc021000  65404K -----   [ anon ]
00007f71e0000000    132K rw---   [ anon ]
00007f71e0021000  65404K -----   [ anon ]
00007f71e4000000    132K rw---   [ anon ]
00007f71e4021000  65404K -----   [ anon ]
00007f71e8000000    132K rw---   [ anon ]
00007f71e8021000  65404K -----   [ anon ]
00007f71ec000000    132K rw---   [ anon ]
00007f71ec021000  65404K -----   [ anon ]
00007f71f0000000    132K rw---   [ anon ]
00007f71f0021000  65404K -----   [ anon ]
00007f71f4000000    132K rw---   [ anon ]
00007f71f4021000  65404K -----   [ anon ]
00007f71f8000000    132K rw---   [ anon ]
00007f71f8021000  65404K -----   [ anon ]
00007f71fc00c000      4K -----   [ anon ]
00007f71fc00d000    256K rw---   [ anon ]
00007f71fc04d000      4K -----   [ anon ]
00007f71fc04e000    256K rw---   [ anon ]
00007f71fc08e000      4K -----   [ anon ]
00007f71fc08f000   1024K rw---   [ anon ]
00007f71fc18f000      4K -----   [ anon ]
00007f71fc190000   2048K rw---   [ anon ]
00007f71fca5b000      4K -----   [ anon ]
00007f71fca5c000   2048K rw---   [ anon ]
00007f71fce52000      4K -----   [ anon ]
00007f71fce53000    256K rw---   [ anon ]
00007f71fce93000      4K -----   [ anon ]
00007f71fce94000    256K rw---   [ anon ]
00007f71fcf0b000      4K -----   [ anon ]
00007f71fcf0c000    256K rw---   [ anon ]
00007f71fcf4c000      4K -----   [ anon ]
00007f71fcf4d000    256K rw---   [ anon ]
00007f71fcf8d000      4K -----   [ anon ]
00007f71fcf8e000    256K rw---   [ anon ]
00007f71fcfce000      4K -----   [ anon ]
00007f71fcfcf000    256K rw---   [ anon ]
00007f71fd00f000      4K -----   [ anon ]
00007f71fd010000   1024K rw---   [ anon ]
00007f71fd110000      4K -----   [ anon ]
00007f71fd111000   1024K rw---   [ anon ]
00007f71fd211000      4K -----   [ anon ]
00007f71fd212000   1024K rw---   [ anon ]
00007f71fd312000      4K -----   [ anon ]
00007f71fd313000   1024K rw---   [ anon ]
00007f71fd413000      4K -----   [ anon ]
00007f71fd414000   1024K rw---   [ anon ]
00007f71fd514000      4K -----   [ anon ]
00007f71fd515000   1024K rw---   [ anon ]
00007f71fd615000      4K -----   [ anon ]
00007f71fd616000    256K rw---   [ anon ]
00007f71fd656000      4K -----   [ anon ]
00007f71fd657000    256K rw---   [ anon ]
00007f71fd697000     68K r-x-- h263-1998_video_pwplugin.so
00007f71fd6a8000   2044K ----- h263-1998_video_pwplugin.so
00007f71fd8a7000      4K r---- h263-1998_video_pwplugin.so
00007f71fd8a8000      4K rw--- h263-1998_video_pwplugin.so
00007f71fd8a9000     48K r-x-- libnss_files-2.17.so
00007f71fd8b5000   2044K ----- libnss_files-2.17.so
00007f71fdab4000      4K r---- libnss_files-2.17.so
00007f71fdab5000      4K rw--- libnss_files-2.17.so
00007f71fdab6000     24K rw---   [ anon ]
00007f71fdabc000      8K r-x-- libXau.so.6.0.0
00007f71fdabe000   2048K ----- libXau.so.6.0.0
00007f71fdcbe000      4K r---- libXau.so.6.0.0
00007f71fdcbf000      4K rw--- libXau.so.6.0.0
00007f71fdcc0000    144K r-x-- liblzma.so.5.0.99
00007f71fdce4000   2044K ----- liblzma.so.5.0.99
00007f71fdee3000      4K r---- liblzma.so.5.0.99
00007f71fdee4000      4K rw--- liblzma.so.5.0.99
00007f71fdee5000    384K r-x-- libpcre.so.1.2.0
00007f71fdf45000   2044K ----- libpcre.so.1.2.0
00007f71fe144000      4K r---- libpcre.so.1.2.0
00007f71fe145000      4K rw--- libpcre.so.1.2.0
00007f71fe146000     32K r-x-- libpciaccess.so.0.11.1
00007f71fe14e000   2048K ----- libpciaccess.so.0.11.1
00007f71fe34e000      4K r---- libpciaccess.so.0.11.1
00007f71fe34f000      4K rw--- libpciaccess.so.0.11.1
00007f71fe350000    156K r-x-- libxcb.so.1.1.0
00007f71fe377000   2044K ----- libxcb.so.1.1.0
00007f71fe576000      4K r---- libxcb.so.1.1.0
00007f71fe577000      4K rw--- libxcb.so.1.1.0
00007f71fe578000    132K r-x-- libselinux.so.1
00007f71fe599000   2048K ----- libselinux.so.1
00007f71fe799000      4K r---- libselinux.so.1
00007f71fe79a000      4K rw--- libselinux.so.1
00007f71fe79b000      8K rw---   [ anon ]
00007f71fe79d000      8K r-x-- libfreebl3.so
00007f71fe79f000   2044K ----- libfreebl3.so
00007f71fe99e000      4K r---- libfreebl3.so
00007f71fe99f000      4K rw--- libfreebl3.so
00007f71fe9a0000    136K r-x-- libdrm_intel.so.1.0.0
00007f71fe9c2000   2048K ----- libdrm_intel.so.1.0.0
00007f71febc2000      4K r---- libdrm_intel.so.1.0.0
00007f71febc3000      4K rw--- libdrm_intel.so.1.0.0
00007f71febc4000     20K r-x-- libXfixes.so.3.1.0
00007f71febc9000   2044K ----- libXfixes.so.3.1.0
00007f71fedc8000      4K r---- libXfixes.so.3.1.0
00007f71fedc9000      4K rw--- libXfixes.so.3.1.0
00007f71fedca000     68K r-x-- libXext.so.6.4.0
00007f71feddb000   2044K ----- libXext.so.6.4.0
00007f71fefda000      4K r---- libXext.so.6.4.0
00007f71fefdb000      4K rw--- libXext.so.6.4.0
00007f71fefdc000   1248K r-x-- libX11.so.6.3.0
00007f71ff114000   2048K ----- libX11.so.6.3.0
00007f71ff314000      4K r---- libX11.so.6.3.0
00007f71ff315000     20K rw--- libX11.so.6.3.0
00007f71ff31a000     56K r-x-- libdrm.so.2.4.0
00007f71ff328000   2044K ----- libdrm.so.2.4.0
00007f71ff527000      4K r---- libdrm.so.2.4.0
00007f71ff528000      4K rw--- libdrm.so.2.4.0
00007f71ff529000     12K r-x-- libkeyutils.so.1.5
00007f71ff52c000   2044K ----- libkeyutils.so.1.5
00007f71ff72b000      4K r---- libkeyutils.so.1.5
00007f71ff72c000      4K rw--- libkeyutils.so.1.5
00007f71ff72d000     52K r-x-- libkrb5support.so.0.1
00007f71ff73a000   2044K ----- libkrb5support.so.0.1
00007f71ff939000      4K r---- libkrb5support.so.0.1
00007f71ff93a000      4K rw--- libkrb5support.so.0.1
00007f71ff93b000     32K r-x-- libcrypt-2.17.so
00007f71ff943000   2044K ----- libcrypt-2.17.so
00007f71ffb42000      4K r---- libcrypt-2.17.so
00007f71ffb43000      4K rw--- libcrypt-2.17.so
00007f71ffb44000    184K rw---   [ anon ]
00007f71ffb72000    696K r-x-- libfdk-aac.so.1.0.0
00007f71ffc20000   2044K ----- libfdk-aac.so.1.0.0
00007f71ffe1f000      8K r---- libfdk-aac.so.1.0.0
00007f71ffe21000      4K rw--- libfdk-aac.so.1.0.0
00007f71ffe22000      8K rw---   [ anon ]
00007f71ffe24000   1136K r-x-- libx264.so.142
00007f71fff40000   2044K ----- libx264.so.142
00007f720013f000      4K r---- libx264.so.142
00007f7200140000      4K rw--- libx264.so.142
00007f7200141000    492K rw---   [ anon ]
00007f72001bc000   3640K r-x-- libx265.so.68
00007f720054a000   2044K ----- libx265.so.68
00007f7200749000      8K r---- libx265.so.68
00007f720074b000      4K rw--- libx265.so.68
00007f720074c000     20K rw---   [ anon ]
00007f7200751000    312K r-x-- libavutil.so.55.9.100
00007f720079f000   2048K ----- libavutil.so.55.9.100
00007f720099f000     64K r---- libavutil.so.55.9.100
00007f72009af000      4K rw--- libavutil.so.55.9.100
00007f72009b0000     80K rw---   [ anon ]
00007f72009c4000     96K r-x-- libswresample.so.2.0.101
00007f72009dc000   2048K ----- libswresample.so.2.0.101
00007f7200bdc000      8K r---- libswresample.so.2.0.101
00007f7200bde000      4K rw--- libswresample.so.2.0.101
00007f7200bdf000   1704K r-x-- i965_drv_video.so
00007f7200d89000   2044K ----- i965_drv_video.so
00007f7200f88000      4K r---- i965_drv_video.so
00007f7200f89000     16K rw--- i965_drv_video.so
00007f7200f8d000     16K r-x-- libva-x11.so.1.3800.0
00007f7200f91000   2044K ----- libva-x11.so.1.3800.0
00007f7201190000      4K r---- libva-x11.so.1.3800.0
00007f7201191000      4K rw--- libva-x11.so.1.3800.0
00007f7201192000   1828K r-x-- libavformat.so.57.19.100
00007f720135b000   2048K ----- libavformat.so.57.19.100
00007f720155b000     76K r---- libavformat.so.57.19.100
00007f720156e000     88K rw--- libavformat.so.57.19.100
00007f7201584000      8K r-x-- libva-drm.so.1.3800.0
00007f7201586000   2044K ----- libva-drm.so.1.3800.0
00007f7201785000      4K r---- libva-drm.so.1.3800.0
00007f7201786000      4K rw--- libva-drm.so.1.3800.0
00007f7201787000    108K r-x-- libva.so.1.3800.0
00007f72017a2000   2044K ----- libva.so.1.3800.0
00007f72019a1000      4K r---- libva.so.1.3800.0
00007f72019a2000      4K rw--- libva.so.1.3800.0
00007f72019a3000     84K r-x-- libz.so.1.2.7
00007f72019b8000   2044K ----- libz.so.1.2.7
00007f7201bb7000      4K r---- libz.so.1.2.7
00007f7201bb8000      4K rw--- libz.so.1.2.7
00007f7201bb9000     12K r-x-- libcom_err.so.2.1
00007f7201bbc000   2044K ----- libcom_err.so.2.1
00007f7201dbb000      4K r---- libcom_err.so.2.1
00007f7201dbc000      4K rw--- libcom_err.so.2.1
00007f7201dbd000    196K r-x-- libk5crypto.so.3.1
00007f7201dee000   2044K ----- libk5crypto.so.3.1
00007f7201fed000      8K r---- libk5crypto.so.3.1
00007f7201fef000      4K rw--- libk5crypto.so.3.1
00007f7201ff0000    864K r-x-- libkrb5.so.3.3
00007f72020c8000   2044K ----- libkrb5.so.3.3
00007f72022c7000     56K r---- libkrb5.so.3.3
00007f72022d5000     12K rw--- libkrb5.so.3.3
00007f72022d8000    296K r-x-- libgssapi_krb5.so.2.2
00007f7202322000   2048K ----- libgssapi_krb5.so.2.2
00007f7202522000      4K r---- libgssapi_krb5.so.2.2
00007f7202523000      8K rw--- libgssapi_krb5.so.2.2
00007f7202525000    228K r-x-- libnspr4.so
00007f720255e000   2048K ----- libnspr4.so
00007f720275e000      4K r---- libnspr4.so
00007f720275f000      8K rw--- libnspr4.so
00007f7202761000      8K rw---   [ anon ]
00007f7202763000     16K r-x-- libplc4.so
00007f7202767000   2044K ----- libplc4.so
00007f7202966000      4K r---- libplc4.so
00007f7202967000      4K rw--- libplc4.so
00007f7202968000     12K r-x-- libplds4.so
00007f720296b000   2044K ----- libplds4.so
00007f7202b6a000      4K r---- libplds4.so
00007f7202b6b000      4K rw--- libplds4.so
00007f7202b6c000    148K r-x-- libnssutil3.so
00007f7202b91000   2048K ----- libnssutil3.so
00007f7202d91000     24K r---- libnssutil3.so
00007f7202d97000      4K rw--- libnssutil3.so
00007f7202d98000   1144K r-x-- libnss3.so
00007f7202eb6000   2044K ----- libnss3.so
00007f72030b5000     20K r---- libnss3.so
00007f72030ba000      8K rw--- libnss3.so
00007f72030bc000      8K rw---   [ anon ]
00007f72030be000    144K r-x-- libsmime3.so
00007f72030e2000   2044K ----- libsmime3.so
00007f72032e1000     12K r---- libsmime3.so
00007f72032e4000      4K rw--- libsmime3.so
00007f72032e5000    244K r-x-- libssl3.so
00007f7203322000   2048K ----- libssl3.so
00007f7203522000     12K r---- libssl3.so
00007f7203525000      4K rw--- libssl3.so
00007f7203526000      4K rw---   [ anon ]
00007f7203527000    160K r-x-- libssh2.so.1.0.1
00007f720354f000   2048K ----- libssh2.so.1.0.1
00007f720374f000      4K r---- libssh2.so.1.0.1
00007f7203750000      4K rw--- libssh2.so.1.0.1
00007f7203751000    200K r-x-- libidn.so.11.6.11
00007f7203783000   2044K ----- libidn.so.11.6.11
00007f7203982000      4K r---- libidn.so.11.6.11
00007f7203983000      4K rw--- libidn.so.11.6.11
00007f7203984000     88K r-x-- libresolv-2.17.so
00007f720399a000   2048K ----- libresolv-2.17.so
00007f7203b9a000      4K r---- libresolv-2.17.so
00007f7203b9b000      4K rw--- libresolv-2.17.so
00007f7203b9c000      8K rw---   [ anon ]
00007f7203b9e000    156K r-x-- libexpat.so.1.6.0
00007f7203bc5000   2048K ----- libexpat.so.1.6.0
00007f7203dc5000      8K r---- libexpat.so.1.6.0
00007f7203dc7000      4K rw--- libexpat.so.1.6.0
00007f7203dc8000   2256K r-x-- libcrypto.so.1.0.2k
00007f7203ffc000   2048K ----- libcrypto.so.1.0.2k
00007f72041fc000    112K r---- libcrypto.so.1.0.2k
00007f7204218000     52K rw--- libcrypto.so.1.0.2k
00007f7204225000     16K rw---   [ anon ]
00007f7204229000    412K r-x-- libssl.so.1.0.2k
00007f7204290000   2048K ----- libssl.so.1.0.2k
00007f7204490000     16K r---- libssl.so.1.0.2k
00007f7204494000     28K rw--- libssl.so.1.0.2k
00007f720449b000    344K r-x-- libldap_r-2.4.so.2.10.3
00007f72044f1000   2048K ----- libldap_r-2.4.so.2.10.3
00007f72046f1000     12K r---- libldap_r-2.4.so.2.10.3
00007f72046f4000      4K rw--- libldap_r-2.4.so.2.10.3
00007f72046f5000      8K rw---   [ anon ]
00007f72046f7000     56K r-x-- liblber-2.4.so.2.10.3
00007f7204705000   2044K ----- liblber-2.4.so.2.10.3
00007f7204904000      4K r---- liblber-2.4.so.2.10.3
00007f7204905000      4K rw--- liblber-2.4.so.2.10.3
00007f7204906000    320K r-x-- libldap-2.4.so.2.10.3
00007f7204956000   2044K ----- libldap-2.4.so.2.10.3
00007f7204b55000     12K r---- libldap-2.4.so.2.10.3
00007f7204b58000      4K rw--- libldap-2.4.so.2.10.3
00007f7204b59000    112K r-x-- libsasl2.so.3.0.0
00007f7204b75000   2044K ----- libsasl2.so.3.0.0
00007f7204d74000      4K r---- libsasl2.so.3.0.0
00007f7204d75000      4K rw--- libsasl2.so.3.0.0
00007f7204d76000     28K r-x-- librt-2.17.so
00007f7204d7d000   2044K ----- librt-2.17.so
00007f7204f7c000      4K r---- librt-2.17.so
00007f7204f7d000      4K rw--- librt-2.17.so
00007f7204f7e000     32K r-x-- libG7221Enc.so
00007f7204f86000   2044K ----- libG7221Enc.so
00007f7205185000     24K rw--- libG7221Enc.so
00007f720518b000     48K rw---   [ anon ]
00007f7205197000     28K r-x-- libG7221Dec.so
00007f720519e000   2044K ----- libG7221Dec.so
00007f720539d000     20K rw--- libG7221Dec.so
00007f72053a2000     48K rw---   [ anon ]
00007f72053ae000    116K r-x-- libG722Enc.so
00007f72053cb000   2048K ----- libG722Enc.so
00007f72055cb000      4K rw--- libG722Enc.so
00007f72055cc000   1136K rw---   [ anon ]
00007f72056e8000    136K r-x-- libG722Dec.so
00007f720570a000   2044K ----- libG722Dec.so
00007f7205909000      8K rw--- libG722Dec.so
00007f720590b000   1132K rw---   [ anon ]
00007f7205a26000    284K r-x-- libopus.so.0.5.2
00007f7205a6d000   2048K ----- libopus.so.0.5.2
00007f7205c6d000      4K r---- libopus.so.0.5.2
00007f7205c6e000      4K rw--- libopus.so.0.5.2
00007f7205c6f000    496K r-x-- libswscale.so.4.0.100
00007f7205ceb000   2048K ----- libswscale.so.4.0.100
00007f7205eeb000      4K r---- libswscale.so.4.0.100
00007f7205eec000      4K rw--- libswscale.so.4.0.100
00007f7205eed000     32K rw---   [ anon ]
00007f7205ef5000  10796K r-x-- libavcodec.so.57.16.100
00007f7206980000   2048K ----- libavcodec.so.57.16.100
00007f7206b80000    156K r---- libavcodec.so.57.16.100
00007f7206ba7000    136K rw--- libavcodec.so.57.16.100
00007f7206bc9000   6672K rw---   [ anon ]
00007f720724d000   1748K r-x-- libDynamicCodec.so.1.85770
00007f7207402000   2048K ----- libDynamicCodec.so.1.85770
00007f7207602000     20K r---- libDynamicCodec.so.1.85770
00007f7207607000     40K rw--- libDynamicCodec.so.1.85770
00007f7207611000      4K rw---   [ anon ]
00007f7207612000      8K r-x-- libdl-2.17.so
00007f7207614000   2048K ----- libdl-2.17.so
00007f7207814000      4K r---- libdl-2.17.so
00007f7207815000      4K rw--- libdl-2.17.so
00007f7207816000     92K r-x-- libpthread-2.17.so
00007f720782d000   2044K ----- libpthread-2.17.so
00007f7207a2c000      4K r---- libpthread-2.17.so
00007f7207a2d000      4K rw--- libpthread-2.17.so
00007f7207a2e000     16K rw---   [ anon ]
00007f7207a32000   1760K r-x-- libc-2.17.so
00007f7207bea000   2048K ----- libc-2.17.so
00007f7207dea000     16K r---- libc-2.17.so
00007f7207dee000      8K rw--- libc-2.17.so
00007f7207df0000     20K rw---   [ anon ]
00007f7207df5000     84K r-x-- libgcc_s-4.8.5-20150702.so.1
00007f7207e0a000   2044K ----- libgcc_s-4.8.5-20150702.so.1
00007f7208009000      4K r---- libgcc_s-4.8.5-20150702.so.1
00007f720800a000      4K rw--- libgcc_s-4.8.5-20150702.so.1
00007f720800b000   1028K r-x-- libm-2.17.so
00007f720810c000   2044K ----- libm-2.17.so
00007f720830b000      4K r---- libm-2.17.so
00007f720830c000      4K rw--- libm-2.17.so
00007f720830d000    932K r-x-- libstdc++.so.6.0.19
00007f72083f6000   2048K ----- libstdc++.so.6.0.19
00007f72085f6000     32K r---- libstdc++.so.6.0.19
00007f72085fe000      8K rw--- libstdc++.so.6.0.19
00007f7208600000     84K rw---   [ anon ]
00007f7208615000    708K r-x-- libsqlite3.so.0.8.6
00007f72086c6000   2044K ----- libsqlite3.so.0.8.6
00007f72088c5000      8K r---- libsqlite3.so.0.8.6
00007f72088c7000     12K rw--- libsqlite3.so.0.8.6
00007f72088ca000    400K r-x-- libcurl.so.4.3.0
00007f720892e000   2048K ----- libcurl.so.4.3.0
00007f7208b2e000      8K r---- libcurl.so.4.3.0
00007f7208b30000      4K rw--- libcurl.so.4.3.0
00007f7208b31000      4K rw---   [ anon ]
00007f7208b32000    304K r-x-- libzmq.so.4
00007f7208b7e000   2044K ----- libzmq.so.4
00007f7208d7d000     16K r---- libzmq.so.4
00007f7208d81000      4K rw--- libzmq.so.4
00007f7208d82000   9316K r-x-- libh323_x86_64_.so.1.26.5
00007f720969b000   2048K ----- libh323_x86_64_.so.1.26.5
00007f720989b000    596K r---- libh323_x86_64_.so.1.26.5
00007f7209930000     72K rw--- libh323_x86_64_.so.1.26.5
00007f7209942000     24K rw---   [ anon ]
00007f7209948000   4056K r-x-- libpt.so.2.12.8
00007f7209d3e000   2048K ----- libpt.so.2.12.8
00007f7209f3e000    332K r---- libpt.so.2.12.8
00007f7209f91000     48K rw--- libpt.so.2.12.8
00007f7209f9d000     32K rw---   [ anon ]
00007f7209fa5000    252K r-x-- libjson.so
00007f7209fe4000   2048K ----- libjson.so
00007f720a1e4000      4K r---- libjson.so
00007f720a1e5000      8K rw--- libjson.so
00007f720a1e7000    296K r-x-- libDynamicCodecForGW.so
00007f720a231000   2044K ----- libDynamicCodecForGW.so
00007f720a430000      8K r---- libDynamicCodecForGW.so
00007f720a432000     16K rw--- libDynamicCodecForGW.so
00007f720a436000   1872K r-x-- libraknet.so
00007f720a60a000   2048K ----- libraknet.so
00007f720a80a000     16K r---- libraknet.so
00007f720a80e000     36K rw--- libraknet.so
00007f720a817000     52K rw---   [ anon ]
00007f720a824000   1372K r-x-- libRakNetForC.so.1.79956
00007f720a97b000   2044K ----- libRakNetForC.so.1.79956
00007f720ab7a000     16K r---- libRakNetForC.so.1.79956
00007f720ab7e000     28K rw--- libRakNetForC.so.1.79956
00007f720ab85000      8K rw---   [ anon ]
00007f720ab87000    132K r-x-- ld-2.17.so
00007f720abad000      4K -----   [ anon ]
00007f720abae000    256K rw---   [ anon ]
00007f720abee000      4K -----   [ anon ]
00007f720abef000    256K rw---   [ anon ]
00007f720ac2f000      4K -----   [ anon ]
00007f720ac30000    256K rw---   [ anon ]
00007f720ac70000      4K -----   [ anon ]
00007f720ac71000    256K rw---   [ anon ]
00007f720acb1000      4K -----   [ anon ]
00007f720acb2000    256K rw---   [ anon ]
00007f720acf2000      4K -----   [ anon ]
00007f720acf3000    256K rw---   [ anon ]
00007f720ad33000      4K -----   [ anon ]
00007f720ad34000    388K rw---   [ anon ]
00007f720ada4000     16K rw---   [ anon ]
00007f720ada8000      4K r---- ld-2.17.so
00007f720ada9000      4K rw--- ld-2.17.so
00007f720adaa000      4K rw---   [ anon ]
00007ffcc492a000    132K rw---   [ stack ]
00007ffcc49cb000      8K r-x--   [ anon ]
ffffffffff600000      4K r-x--   [ anon ]
 total          9110048K

出現大量的[anon]的堆信息。一般這些屬於主程序的堆。

隨意選一個看起來很大的堆進行調試

(gdb) x/16896a 0x00007f6f84000000
……
出現了很多,我們節選一段
……
0x7f6f84020ce0: 0xa2c65736c610000   0x75df80 <_ZTV7PString+16>  <---我們選擇查看了此PString
0x7f6f84020cf0: 0x5373692200000000  0x7f6f84020d30
0x7f6f84020d00: 0x7274203a00000001  0x7f6f84020d50
0x7f6f84020d10: 0x920202001 0x3a2022656d010100
0x7f6f84020d20: 0x200a223031332220  0x25
0x7f6f84020d30: 0x10000000a 0x7f71d8000001
0x7f6f84020d40: 0x0 0x25
0x7f6f84020d50: 0x2e302e302e373231  0x7f71d8000031
0x7f6f84020d60: 0x0 0x25
0x7f6f84020d70: 0x100000004 0x7f71d8000001
0x7f6f84020d80: 0x0 0x25
0x7f6f84020d90: 0x393231    0x7f71d8000000
0x7f6f84020da0: 0x0 0x95
0x7f6f84020db0: 0x1312d8100000001   0x75df80 <_ZTV7PString+16>
0x7f6f84020dc0: 0x0 0x7f6f84020d70
0x7f6f84020dd0: 0x64656c6c00000001  0x7f6f84020d90
0x7f6f84020de0: 0x3200a2c01 0x120202000
---Type <return> to continue, or q <return> to quit---
0x7f6f84020df0: 0x6172656d61430000  0x75df80 <_ZTV7PString+16>
0x7f6f84020e00: 0x20200a2c00000000  0x7f6f84020e40
0x7f6f84020e10: 0x7369447300000001  0x7f6f84020e60
0x7f6f84020e20: 0x9203a2001 0x2020202020010100
0x7f6f84020e30: 0x6922202020202020  0x25
0x7f6f84020e40: 0x10000000a 0x7f71d8000001
0x7f6f84020e50: 0x0 0x25
0x7f6f84020e60: 0x2e302e302e373231  0x7f71d8000031
0x7f6f84020e70: 0x0 0x25
0x7f6f84020e80: 0x100000004 0x7f71d8000001
0x7f6f84020e90: 0x0 0x25
0x7f6f84020ea0: 0x383231    0x7f71d8000000
0x7f6f84020eb0: 0x0 0x95
0x7f6f84020ec0: 0x1312d8000000001   0x75df80 <_ZTV7PString+16>
0x7f6f84020ed0: 0x0 0x7f6f84020e80
0x7f6f84020ee0: 0x7053736900000001  0x7f6f84020ea0
0x7f6f84020ef0: 0x33a202201 0x1200a2c00
0x7f6f84020f00: 0x2220202020200000  0x75df80 <_ZTV7PString+16>
0x7f6f84020f10: 0x20200a2200000000  0x7f6f84020f50
0x7f6f84020f20: 0x2020202000000001  0x7f6f84020f70
0x7f6f84020f30: 0x920202001 0x3a2022726c010100
0x7f6f84020f40: 0x200a2c6575727420  0x25
0x7f6f84020f50: 0x10000000a 0x7f71d8000001
0x7f6f84020f60: 0x0 0x25
0x7f6f84020f70: 0x2e302e302e373231  0x7f71d8000031
0x7f6f84020f80: 0x0 0x25
0x7f6f84020f90: 0x100000004 0x7f71d8000001
0x7f6f84020fa0: 0x0 0x25
0x7f6f84020fb0: 0x373231    0x7f71d8000000
0x7f6f84020fc0: 0x0 0x95
0x7f6f84020fd0: 0x1312d7f00000001   0x75df80 <_ZTV7PString+16> <---我們選擇查看了此PString
0x7f6f84020fe0: 0x0 0x7f6f84020f90
0x7f6f84020ff0: 0x2020200a00000001  0x7f6f84020fb0
(gdb) p *((PString*) 0x7f6f84020fd8)
$2 = {<PCharArray> = {<PBaseArray<char>> = {<PAbstractArray> = {<PContainer> = {<PObject> = {_vptr.PObject = 0x75df80 <vtable for PString+16>, m_traceContextIdentifier = 0}, reference = 0x7f6f84020f90}, elementSize = 1, 
        theArray = 0x7f6f84020fb0 "127", allocatedDynamically = true}, <No data fields>}, <No data fields>}, m_length = 3}
(gdb) p *((PString*) 0x7f6f84020ce8)
$3 = {<PCharArray> = {<PBaseArray<char>> = {<PAbstractArray> = {<PContainer> = {<PObject> = {_vptr.PObject = 0x75df80 <vtable for PString+16>, m_traceContextIdentifier = 0}, reference = 0x7f6f84020d30}, elementSize = 1, 
        theArray = 0x7f6f84020d50 "127.0.0.1", allocatedDynamically = true}, <No data fields>}, <No data fields>}, m_length = 9}

可以明顯看到,存在大量的PString類泄露。由於我們是8進制一組,且指針出現在了右側,所以我們應當在左側地址偏移8,得到PString類的指針地址。打印發現裏面存在着這些信息。可以多嘗試幾組打印值。接着就可以結合業務,猜測出來是那塊代碼發生了泄露。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章