Muszę wiedzieć, jak mogę zrzucić pamięć do Safari.app do pliku.
Podałem numer gdb w załączniku 6741 (mój identyfikator PID safari).
Co teraz?
Próbowałem szukać pomocy na gdb w google, ale nie mogłem znaleźć niczego, co powiedziałoby mi, co mam robić, nawet podczas wyszukiwania „jak zrzucić pamięć do gdb” :(
Próbowałem „zrzutu pomocy”, dał mi mnóstwo poleceń, ale żadne z nich nie zadziałało. Najbliżej byłam:
(gdb) dump memory ~/safaridump.bin 0
Missing stop address.
Więc jaki jest adres końcowy? Nie wiem? Jak mam poznać adres zatrzymania? Próbowałem wyszukać w Google „” brakujący adres zatrzymania „gdb”, to nie pomogło. Nie mam pojęcia, jak uzyskać adres stop.
Próbowałem tego:
(gdb) zrzut pamięci ~ / safaridump.bin 0 0xffffffff
To też nie działało.
Mam to:
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
Naprawdę tego nie rozumiem. Chcę tylko mojej pamięci w Safari zapisanej w pliku.
To dla mnie bardzo ważne. Spędziłem około 2 godzin na pisaniu mojego biednego serca w Safari, zapisując kilka naprawdę ważnych informacji. A potem ta głupia strona, na której pisałem, nie zaakceptowała mojego postu, ponieważ napisałam go tak długo, że „wylogowałam się”. Kiedy się ponownie zalogowałem, mój post został utracony.
Naprawdę chcę to odpisać. Chcę tylko pamięci z Safari, więc mogę przeszukać jej zawartość pod kątem kilku słów kluczowych, aby sprawdzić, czy mogę odzyskać swoje pisanie.
Jakieś pomysły?
Przynajmniej, nawet jeśli nie odzyskam pisma, nauczę się czegoś o gdb. Co może się przydać w rozwoju mojego oprogramowania;)
Dzięki, jeśli możesz pomóc! To wiele by dla mnie znaczyło. Opuszczę Safari i gdb, dopóki nie otrzymam odpowiedzi. Nie pozwolę temu odejść, dopóki nie dowiem się, że mogę odzyskać pisanie.
Jeśli ktoś chce udzielić bardziej ogólnych odpowiedzi na temat odzyskiwania utraconej pracy ... to dobrze. Takie jak programy do przeszukiwania całego dysku twardego w poszukiwaniu określonych ciągów, które mogły znajdować się w pamięci VRAM przed utratą pracy.
...
http://www.mail-archive.com/[email protected]/msg22978.html Ta strona mówi, że kill -9 nie generuje zrzutu podstawowego. Pomimo tego, co mówi ta strona http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , to polecenie „kill -ABRT (PID TUTAJ)” nie utworzy zrzutu podstawowego.
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 ..
Odpowiedzi:
Cześć wszystkim, znalazłem sposób na wygenerowanie rdzeni w OSX!
http://osxbook.com/book/bonus/chapter8/core/
Istnieje tam program do pobrania, w formie źródłowej. Pobrałem go, skompilowałem i, brawo! Zadziałało! Wygenerował prawie 1 GB zrzutu pamięci!
To, czy informacje tam są, nie ma teraz znaczenia. Nauczyłem się, jak generować zrzuty rdzeniowe w OSX, co zdecydowanie może być przydatną umiejętnością jako programista;) Nigdy nie wiadomo, kiedy zrzut rdzenia może się przydać.
Mogę sobie wyobrazić, że po kilku latach wykonuję ważną pracę i potrzebuję zrzutu pamięci, aby dowiedzieć się, co się dzieje, a ta aplikacja „gcore” jest tym, czego potrzebowałam. Nawet jeśli raz się opłaca ... to dobra rzecz.
źródło
gcore
jest zawarty w macOS od 10.12 Sierra. Znajduje się na,/usr/bin/gcore
a także ma stronę podręcznika na/usr/share/man/man1/gcore.1
. To jest dodatkowo potwierdzony przez Homebrew który odmawia zainstalowaniagcore
na/usr/local/bin
temat Sierra lub wyższej.Safari zapisuje dane formularza dla wszystkich formularzy (chyba że je wyłączyłeś lub witryna oznaczy formularz jako niezapisywany) w zaszyfrowanym pliku bazy danych. Możesz znaleźć hasło do pliku w pęku kluczy logowania, a plik jest w
~/Library/Safari/Form Values
, więc teoretycznie możesz wyodrębnić dane z pliku i sprawdzić, czy tam jest to, co wpisałeś.Miałem jednak włamanie i nie jestem w stanie ustalić, jaki jest format pliku ani w jaki sposób jest on szyfrowany, więc nie wiem, jak uzyskać dostęp do zawartości, jestem pewien, że ktoś to robi :)
źródło
Zawsze możesz włączyć logowanie w GDB
set logging on
Następnie wszystko, co robisz, jest drukowane do pliku dziennika (zwykle gdb.txt). Możesz więc po prostu rozpocząć drukowanie pamięci za pomocą
x
polecenia, a wszystko przejdzie do pliku dziennika, a także ekranu.źródło
Sprawdź, czy OSX ma polecenie pmap, pokaże ono zmapowaną pamięć dowolnego uruchomionego procesu. Zwykle jest to odczytywane z / proc w systemach Linux. Następnie, jeśli szukasz konkretnej informacji, możesz użyć polecenia gdb find. Wpisz help find w gdb, aby uzyskać więcej instrukcji.
źródło
Wiem, stary wątek ...
gdb ma wbudowane polecenie do zrzucenia obrazu rdzenia bieżącego procesu / programu.
oba polecenia robią to samo, nazwa pliku jest opcjonalna, domyślnie „ core. <ipprocess_ip> ”
Huh! wygląda na to, że jest nawet zainstalowane narzędzie (z gdb) o nazwie „gcore” do zrzutu aktualnie uruchomionego programu. Oczywiście łatwiej jest zatrzymać proces za pomocą gdb, a następnie go zrzucić.
Znajdowanie nowych rzeczy każdego dnia! ... ale gdb ma wbudowaną funkcję ... po prostu wiesz ...
źródło
(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".