Preciso saber como despejar memória no Safari.app em um arquivo.
Entrei no anexo 6741 do gdb (meu PID do safari).
O que agora?
Tentei procurar ajuda no gdb no google, mas não consegui encontrar nada que me dissesse o que fazer, mesmo ao pesquisar "como despejar memória no gdb" :(
Eu tentei "ajudar a despejar", isso me deu vários comandos, mas nenhum deles funcionou. O mais próximo que cheguei foi:
(gdb) dump memory ~/safaridump.bin 0
Missing stop address.
Então, qual é o endereço de parada? Eu não sei? Como devo saber o endereço de parada? Tentei pesquisar no google por "" endereço de parada ausente "gdb", não ajudou. Não faço ideia de como obtenho o endereço de parada.
Eu tentei isso:
(gdb) memória de despejo ~ / safaridump.bin 0 0xffffffff
Isso também não funcionou.
Eu tenho esse:
gdb stack crawl at point of internal error:
0 gdb-i386-apple-darwin 0x0012fd8f internal_vproblem + 316
1 gdb-i386-apple-darwin 0x0012ffd3 internal_verror + 43
2 gdb-i386-apple-darwin 0x00130008 align_down + 0
3 gdb-i386-apple-darwin 0x00130a21 xstrvprintf + 0
4 gdb-i386-apple-darwin 0x00130c25 xmalloc + 40
5 gdb-i386-apple-darwin 0x000045d6 dump_memory_to_file + 241
6 gdb-i386-apple-darwin 0x0012dd3d execute_command + 713
7 gdb-i386-apple-darwin 0x0008815d command_handler + 213
8 gdb-i386-apple-darwin 0x000891af command_line_handler + 1120
9 gdb-i386-apple-darwin 0x001c2486 rl_callback_read_char + 137
10 gdb-i386-apple-darwin 0x000882ed rl_callback_read_char_wrapper + 18
11 gdb-i386-apple-darwin 0x000874b7 handle_file_event + 349
12 gdb-i386-apple-darwin 0x00086e7e process_event + 131
13 gdb-i386-apple-darwin 0x00087c38 gdb_do_one_event + 1178
14 gdb-i386-apple-darwin 0x00081bfd catch_errors + 78
/SourceCache/gdb/gdb-1346/src/gdb/utils.c:1208: internal-error: virtual memory exhausted.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) n
Eu realmente não entendo isso. Tudo o que eu quero é a minha memória no Safari, gravada em um arquivo.
É realmente importante para mim. Passei cerca de duas horas digitando meu pobre coração no Safari, escrevendo algumas informações realmente importantes. E então, o site idiota em que eu estava escrevendo não aceitou minha postagem, porque eu havia demorado tanto a escrevê-la que havia "desconectado". Quando eu entrei novamente, minha postagem estava perdida.
Eu realmente quero essa escrita de volta. Tudo o que eu quero é a memória do Safari, para que eu possa pesquisar no conteúdo algumas palavras-chave para ver se consigo recuperar minha escrita.
Alguma idéia para alguém?
No mínimo, mesmo se eu não receber meus textos de volta, aprenderei algo sobre o gdb. O que pode ser útil no meu desenvolvimento de software;)
Obrigado se você puder ajudar! Isso significaria muito para mim. Vou deixar o Safari e o gdb em execução, até obter uma resposta. Não vou deixar isso passar até que descubra que posso ou não recuperar minha escrita.
Se alguém quiser dar respostas mais gerais sobre como recuperar o trabalho perdido ... isso é uma coisa boa. Como programas para pesquisar em todo o meu disco rígido por seqüências específicas que poderiam estar na VRAM antes que o trabalho fosse perdido.
...
http://www.mail-archive.com/[email protected]/msg22978.html Esta página diz que kill -9 não gera um dump principal. Apesar do que esta página diz http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , este comando "kill -ABRT (PID HERE)" não criará um dump principal.
ls -la /cores
total 0
drwxrwxr-t@ 2 root admin 68 23 Jun 07:19 .
drwxrwxr-t 38 root admin 1360 14 Dec 16:06 ..
Respostas:
Ei pessoal, descobri como gerar um coredump no OSX!
http://osxbook.com/book/bonus/chapter8/core/
Existe um programa para download lá, na forma de fonte. Eu baixei, compilei e, hooray! Funcionou! Ele gerou um dump de núcleo de quase 1 GB!
Se a informação está ou não lá, não importa muito agora. Aprendi como gerar coredumps no OSX, o que definitivamente pode ser uma habilidade útil como desenvolvedor de software;) Você nunca sabe quando um dump principal pode ser útil.
Posso imaginar alguns anos em que estou fazendo um trabalho importante, e preciso de um despejo básico para descobrir o que está acontecendo, e esse aplicativo "gcore" é o que eu precisava. Mesmo que valha a pena uma vez ... isso é uma coisa boa.
fonte
gcore
está incluído no macOS desde a 10.12 Sierra. Ele está localizado em/usr/bin/gcore
e também possui uma página de manual em/usr/share/man/man1/gcore.1
. Isto é ainda confirmado pelo Homebrew que se recusa a instalargcore
para/usr/local/bin
a Serra ou superior.O Safari salva os dados do formulário para todos os formulários (a menos que você o desative ou o site marque o formulário como não deve ser salvo), em um arquivo de banco de dados criptografado. Você pode encontrar a senha do arquivo no seu conjunto de chaves de login, e o arquivo está em
~/Library/Safari/Form Values
, portanto, teoricamente, você pode extrair os dados do arquivo e ver se o que você digitou está lá.No entanto, eu tive um hack e não consigo descobrir qual é o formato do arquivo ou como ele é criptografado, por isso não sei como obter o conteúdo, tenho certeza de que alguém o faz :)
fonte
Você sempre pode ativar o logon no GDB
set logging on
Em seguida, tudo o que você faz é impresso no arquivo de log (geralmente gdb.txt). Assim, você pode começar a imprimir a memória usando o
x
comando e tudo irá para o arquivo de log e também para a tela.fonte
Veja se o OSX possui um comando pmap, ele mostrará a memória mapeada de qualquer processo em execução. Isso geralmente é lido em / proc em sistemas Linux. Em seguida, se você estiver procurando por uma informação específica, poderá usar o comando gdb find. Digite help find in gdb para obter mais instruções.
fonte
Eu sei, fio velho ...
O gdb possui um comando interno para despejar uma imagem principal do processo / programa atual.
os dois comandos fazem o mesmo, o nome do arquivo é opcional, o padrão é ' core. <process_ip> '
Hã! parece que existe até um utilitário instalado (com gdb) chamado 'gcore' para despejar também um programa em execução no momento. Obviamente, é mais fácil pausar o processo com o gdb e depois despejá-lo.
Encontrar coisas novas todos os dias! ... mas o gdb tem a função integrada ... só você sabe ..
fonte
(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".