Não tenho certeza de como você despeja toda a memória em um arquivo sem fazer isso repetidamente (se alguém souber uma maneira automatizada de obter o gdb para fazer isso, por favor me avise), mas o seguinte funciona para qualquer lote de memória, supondo que você saiba o pid:
onde $pidé o número real do pid; para mais informações consulte:info gcore
pode levar algum tempo para o dump acontecer, e alguma memória pode não ser legível, mas é boa o suficiente... esteja ciente também que pode criar arquivos grandes, acabei de criar um arquivo de 2 GB dessa maneira..
Eu fiz meu próprio programa para despejar toda a memória do processo também, está em C para que possa ser compilado para Android, que é o que eu precisava.
Você também pode especificar o endereço IP e a porta tcp. Código fonte aqui .
Se você deseja despejar um segmento de memória separado do processo em execução sem criar um arquivo principal enorme (digamos com gcore), você pode usar uma pequena ferramenta daqui . Há também uma linha no README se você deseja despejar todos os segmentos legíveis em arquivos separados.
Eu fiz um script que realiza essa tarefa.
A ideia vem da resposta de James Lawrie e deste post: http://www.linuxforums.org/forum/programming-scripting/52375-reading-memory-other-processes.html#post287195
coloque isso em um arquivo (por exemplo, "dump-all-memory-of-pid.sh") e torne-o executável
uso:
./dump-all-memory-of-pid.sh [pid]
A saída é impressa em arquivos com os nomes:
pid-startaddress-stopaddress.dump
Dependências:
gdb
Não tenho certeza de como você despeja toda a memória em um arquivo sem fazer isso repetidamente (se alguém souber uma maneira automatizada de obter o gdb para fazer isso, por favor me avise), mas o seguinte funciona para qualquer lote de memória, supondo que você saiba o pid:
Isso estará no formato (exemplo):
Escolha um lote de memória (por exemplo, 00621000-00622000) e use gdb como root para anexar ao processo e despejar essa memória:
Em seguida, analise /root/output com o comando strings, a menos que você queira o PuTTY em toda a tela.
tentar
onde
$pid
é o número real do pid; para mais informações consulte:info gcore
pode levar algum tempo para o dump acontecer, e alguma memória pode não ser legível, mas é boa o suficiente... esteja ciente também que pode criar arquivos grandes, acabei de criar um arquivo de 2 GB dessa maneira..
Solução bash pura:
Uso: procdump PID
para um dump mais limpo, filtre as
*.so
bibliotecas compartilhadas mapeadas na memória e os intervalos de memória vazios:man proc disse:
Talvez possa ajudá-lo
Eu fiz meu próprio programa para despejar toda a memória do processo também, está em C para que possa ser compilado para Android, que é o que eu precisava.
Você também pode especificar o endereço IP e a porta tcp. Código fonte aqui .
Ferramenta para despejar o processo na saída padrão, pcat/memdump:
Agora você pode usar o procdump do pacote SysInternals no Linux:
https://github.com/Microsoft/ProcDump-for-Linux
Se você deseja despejar um segmento de memória separado do processo em execução sem criar um arquivo principal enorme (digamos com gcore), você pode usar uma pequena ferramenta daqui . Há também uma linha no README se você deseja despejar todos os segmentos legíveis em arquivos separados.