J'ai besoin de savoir comment vider la mémoire dans Safari.app, dans un fichier.
J'ai entré gdb attach 6741 (mon safari PID).
Maintenant quoi?
J'ai essayé de chercher de l'aide sur gdb sur google, mais je n'ai rien trouvé qui me dise quoi faire, même lorsque je cherchais "comment vider la mémoire dans gdb" :(
J'ai essayé "help dump", cela m'a donné un tas de commandes, mais aucune n'a fonctionné. Le plus proche je suis venu:
(gdb) dump memory ~/safaridump.bin 0
Missing stop address.
Alors, quelle est l'adresse d'arrêt? Je ne sais pas? Comment dois-je connaître l'adresse d'arrêt? J'ai essayé de rechercher sur google "" l'adresse d'arrêt manquante "gdb", cela n'a pas aidé. Je ne sais pas comment obtenir l'adresse d'arrêt.
J'ai essayé ceci:
(gdb) vidage de la mémoire ~ / safaridump.bin 0 0xffffffff
Cela n'a pas fonctionné non plus.
J'ai compris ceci:
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
Je ne comprends vraiment pas ça. Tout ce que je veux, c'est ma mémoire dans Safari, écrite dans un fichier.
C'est vraiment important pour moi. J'ai passé environ 2 heures à taper mon pauvre cœur dans Safari, à écrire des informations vraiment importantes. Et puis le stupide site Web auquel j'écrivais n'a pas accepté mon message, parce que j'avais mis tellement de temps à l'écrire, que je m'étais «déconnecté». Au moment où je me suis reconnecté, mon poste a été perdu.
Je veux vraiment que cette écriture revienne. Tout ce que je veux, c'est la mémoire de Safari, donc je peux rechercher dans son contenu quelques mots-clés pour voir si je peux récupérer mon écriture.
Des idées quelqu'un?
À tout le moins, même si je ne récupère pas mon écriture, j'apprendrai quelque chose sur gdb. Ce qui pourrait être utile dans mon développement logiciel;)
Merci si tu peux aider! Cela signifierait tellement pour moi. Je vais laisser Safari et gdb fonctionner jusqu'à ce que j'obtienne une réponse. Je ne laisserai pas ça aller jusqu'à ce que je découvre que je peux ou non récupérer mon écriture.
Si quelqu'un veut donner des réponses plus générales sur la façon de récupérer le travail perdu ... c'est une bonne chose. Tels que des programmes pour rechercher sur tout mon disque dur des chaînes spécifiques qui auraient pu se trouver dans VRAM avant la perte du travail.
...
http://www.mail-archive.com/[email protected]/msg22978.html Cette page indique que kill -9 ne génère pas de vidage de mémoire. Malgré ce que dit cette page http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , cette commande "kill -ABRT (PID HERE)" ne créera pas de vidage de mémoire.
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 ..
Réponses:
Salut tout le monde, j'ai trouvé comment générer un coredump sur OSX!
http://osxbook.com/book/bonus/chapter8/core/
Il existe un programme téléchargeable, sous forme de source. Je l'ai téléchargé, compilé et, hourra! Ça a marché! Il a généré un vidage de mémoire de près de 1 Go!
Qu'il y ait ou non des informations là-dedans n'a plus vraiment d'importance maintenant. J'ai appris à générer des coredumps sur OSX, ce qui pourrait certainement être une compétence pratique en tant que développeur de logiciels;) Vous ne savez jamais quand un vidage de mémoire pourrait être utile.
Je peux imaginer quelques années que je fais un travail important, et j'ai besoin d'un core dump pour comprendre ce qui se passe, et cette application "gcore" est ce dont j'avais besoin. Même si ça rapporte une fois ... c'est une bonne chose.
la source
gcore
est inclus dans macOS depuis 10.12 Sierra. Il est situé sur/usr/bin/gcore
et possède également une page de manuel sur/usr/share/man/man1/gcore.1
. Ceci est confirmé par Homebrew qui refuse d'installergcore
à/usr/local/bin
la Sierra ou plus.Safari enregistre les données de formulaire pour tous les formulaires (sauf si vous les avez désactivées ou si le site marque le formulaire comme non à sauvegarder), dans un fichier de base de données crypté. Vous pouvez trouver le mot de passe du fichier dans votre trousseau de connexion, et le fichier est à
~/Library/Safari/Form Values
, donc théoriquement, vous pouvez extraire les données du fichier et voir si ce que vous avez tapé s'y trouve.Cependant, j'ai eu un piratage, et je ne peux pas déterminer le format du fichier, ni comment il est crypté, donc je ne sais pas comment obtenir le contenu, je suis sûr que quelqu'un le fait :)
la source
Vous pouvez toujours activer la connexion dans GDB
set logging on
Ensuite, tout ce que vous faites est imprimé dans le fichier journal (généralement gdb.txt). Vous pouvez donc simplement commencer à imprimer la mémoire à l'aide de la
x
commande, et tout ira dans le fichier journal ainsi que l'écran.la source
Vérifiez si OSX a une commande pmap, elle vous montrera la mémoire mappée de tout processus en cours d'exécution. Ceci est généralement lu depuis / proc dans les systèmes Linux. Ensuite, si vous recherchez une information particulière, vous pouvez utiliser la commande gdb find. Tapez help find dans gdb pour plus d'instructions.
la source
Je sais, vieux fil ...
gdb a une commande intégrée pour vider une image de base du processus / programme actuel.
les deux commandes font de même, le nom de fichier est facultatif, par défaut ' core. <process_ip> '
Huh! il semble qu'il y ait même un utilitaire installé (avec gdb) nommé 'gcore' pour vider également un programme en cours d'exécution. Bien sûr, il est plus facile de suspendre le processus avec gdb, puis de le vider.
Trouver de nouvelles choses chaque jour! ... mais gdb a la fonction intégrée ... comme ça tu sais ..
la source
(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".