Я пишу инструмент для анализа дампа памяти, и мне хотелось бы напечатать оценку объема виртуальной памяти, который процесс использовал во время создания дампа. Эти дампы ядра могут быть вызваны сбоями или могут быть получены вручную с помощью 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, и в этот момент оно использует 4 206 592 байта VSZ. Затем я написал быстрый скрипт, который анализирует info target
вывод и суммирует диапазоны адресов, и я получаю 1 814 528 байт. Я также попробовал info proc mappings
, но, похоже, это работает, только если процесс запущен.
Есть идеи?