在Linux上,如何使用内核转储和gdb来近似虚拟内存使用(VSZ)?

在Linux上,如何使用内核转储和gdb来近似虚拟内存使用(VSZ)?,linux,gdb,Linux,Gdb,我正在编写一个用于核心转储分析的工具,我想打印的一件事是估计进程在转储时使用了多少虚拟内存。这些堆芯转储可能是由于崩溃造成的,也可能是使用gcore手动执行的(例如,用于调整大小)。本质上,我想打印PS-VSZ列的等价物 我已经研究了readelf和gdb,并重点研究了后者。例如,我有一个简单的挂起程序,我在PS中看到: $ ps auxwww | grep a.out USER PID %CPU %MEM VSZ RSS TTY STAT START TIM

我正在编写一个用于核心转储分析的工具,我想打印的一件事是估计进程在转储时使用了多少虚拟内存。这些堆芯转储可能是由于崩溃造成的,也可能是使用gcore手动执行的(例如,用于调整大小)。本质上,我想打印PS-VSZ列的等价物

我已经研究了readelf和gdb,并重点研究了后者。例如,我有一个简单的挂起程序,我在PS中看到:

$ ps auxwww | grep a.out
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     16644  0.0  0.0   4108   472 pts/5    S+   13:51   0:00 ./a.out
我使用gcore获取一个内核,此时它使用4206592字节VSZ。然后我编写了一个快速脚本,解析
info-target
输出,并对地址范围求和,得到1814528字节。我还尝试了
info-proc-mappings
,但这似乎只在进程正在运行时起作用


有什么想法吗?

在我的例子中,gdb和ps的输出显示了相同的信息

root      3976  0.0  0.0   1636   640 tty6     Ss+  08:00   0:00 /sbin/mingetty tty6
pmap也显示相同的1636

3976:   /sbin/mingetty tty6
00110000      4K r-x--    [ anon ]
001c3000    100K r-x--  /lib/ld-2.5.so
001dc000      4K r-x--  /lib/ld-2.5.so
001dd000      4K rwx--  /lib/ld-2.5.so
001e0000   1256K r-x--  /lib/libc-2.5.so
0031a000      8K r-x--  /lib/libc-2.5.so
0031c000      4K rwx--  /lib/libc-2.5.so
0031d000     12K rwx--    [ anon ]
08048000     12K r-x--  /sbin/mingetty
0804b000      4K rw---  /sbin/mingetty
08dd3000    132K rw---    [ anon ]
b7f69000      8K rw---    [ anon ]
b7f79000      4K rw---    [ anon ]
bff4d000     84K rw---    [ stack ]
total     1636K
这是gdb信息过程映射

(gdb) info proc mappings
process 3976

cmdline = '/sbin/mingetty'
cwd = '/'
exe = '/sbin/mingetty'
Mapped address spaces:

    Start Addr   End Addr       Size     Offset objfile
      0x110000   0x111000     0x1000   0x110000           [vdso]
      0x1c3000   0x1dc000    0x19000          0     /lib/ld-2.5.so
      0x1dc000   0x1dd000     0x1000    0x19000     /lib/ld-2.5.so
      0x1dd000   0x1de000     0x1000    0x1a000     /lib/ld-2.5.so
      0x1e0000   0x31a000   0x13a000          0     /lib/libc-2.5.so
      0x31a000   0x31c000     0x2000   0x139000     /lib/libc-2.5.so
      0x31c000   0x31d000     0x1000   0x13b000     /lib/libc-2.5.so
      0x31d000   0x320000     0x3000   0x31d000        
     0x8048000  0x804b000     0x3000          0      /sbin/mingetty
     0x804b000  0x804c000     0x1000     0x2000      /sbin/mingetty
     0x8dd3000  0x8df4000    0x21000  0x8dd3000        
    0xb7f69000 0xb7f6b000     0x2000 0xb7f69000        
    0xb7f79000 0xb7f7a000     0x1000 0xb7f79000        
    0xbff4d000 0xbff62000    0x15000 0xbff4d000           [stack]

你能显示更多关于这个过程的信息吗?

我刚刚尝试了
维护信息部分
,我得到了稍微大一点的,但数量相似的1817528字节。