Wie kann ich Speicher in einer Datei in gdb (osx) ausgeben? Ich muss meine Arbeit retten

13787

Ich muss wissen, wie ich Speicher in Safari.app in eine Datei sichern kann.

Ich habe gdb attach 6741 (meine Safari-PID) eingegeben.

Was jetzt?

Ich habe versucht, auf gdb nach Hilfe bei Google zu suchen, aber ich konnte nichts finden, was mir sagte, was zu tun ist, selbst wenn ich nach "wie man Speicher in gdb entleert" sucht :(

Ich habe "help dump" ausprobiert, es gab mir eine Reihe von Befehlen, aber keiner von ihnen funktionierte. Am nächsten kam ich:

(gdb) dump memory ~/safaridump.bin 0 Missing stop address. 

Also, was ist die Stopadresse? Ich weiß es nicht? Wie soll ich die Stopadresse wissen? Ich habe versucht, bei Google nach "" fehlender Stop-Adresse "gdb" zu suchen, es hat nicht geholfen. Ich habe keine Ahnung, wie ich die Stopadresse bekomme.

Ich habe das versucht:

(gdb) Speicherauszug ~ / safaridump.bin 0 0xffffffff

Das hat auch nicht funktioniert.

Ich habe das bekommen:

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 

Ich verstehe das wirklich nicht. Alles, was ich will, ist mein Gedächtnis in Safari, in eine Datei geschrieben.

Das ist mir wirklich wichtig. Ich verbrachte etwa 2 Stunden damit, mein armes Herz in Safari einzutippen und einige wirklich wichtige Informationen aufzuschreiben. Und dann akzeptierte die blöde Website, an die ich schrieb, meinen Beitrag nicht, weil ich so lange daran gearbeitet hatte, dass ich ihn "abgemeldet" hatte. Als ich mich wieder angemeldet hatte, war mein Posting verloren.

Ich möchte dieses Schreiben wirklich gerne zurück. Alles was ich will ist der Speicher von Safari, also kann ich den Inhalt nach einigen Schlüsselwörtern durchsuchen, um zu sehen, ob ich zurückschreiben kann.

Irgendwelche Ideen?

Zumindest werde ich etwas über gdb erfahren, auch wenn ich nicht zurückschreibe. Was in meiner Softwareentwicklung nützlich sein könnte;)

Danke, wenn Sie helfen können! Es würde mir so viel bedeuten. Ich werde Safari und gdb laufen lassen, bis ich eine Antwort bekomme. Ich werde das nicht loslassen, bis ich herausfinde, dass ich mein Schreiben zurückholen kann oder nicht.

Wenn jemand allgemeinere Antworten geben möchte, wie verlorene Arbeit wiederhergestellt werden kann, ist das eine gute Sache. Beispielsweise Programme, um meine gesamte Festplatte nach bestimmten Zeichenfolgen zu durchsuchen, die vor dem Verlust der Arbeit möglicherweise im VRAM enthalten waren.

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html Diese Seite besagt, dass kill -9 keinen Core-Dump generiert. Trotz des Inhalts dieser Seite http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS wird mit diesem Befehl "kill -ABRT (PID HERE)" kein Core-Dump erstellt.

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 .. 
9
+1 Sympathie bestätigt - Ich bin nicht optimistisch, was die Aussichten für das Wiederherstellen Ihrer Daten angeht, was Sie bereits versucht haben. Aber es ist eine legitime Debugging-Frage, klar geschrieben, mit relevanten Details: Ich glaube nicht, dass es verdient wurde, heruntergestuft zu werden! Jim Lewis vor 14 Jahren 1
NSD. Wie findest du das Ende des Haufens? Was ist der Befehl, den Sie eingeben müssen, um Ihnen die Nummer zurückzugeben? Weißt du das eigentlich? Oder versuchen Sie nur, mir nicht zu helfen? vor 14 Jahren 0
Das funktioniert nicht sehr gut. Ich habe das versucht:Also habe ich "gcore bla2.bin" eingegeben. Und denke ich bekomme ich? "Undefinierter Befehl:" gcore ". Versuchen Sie" help "." Die Dokumente von Apple sagen aus, dass diese Funktion auf einigen Systemen nicht verfügbar ist. Ich denke, das bedeutet auch Macs? Ich frage mich, warum die Dokumente von Apple generische Informationen über die Unixy-gdb hätten, in denen das Verhalten von OSX nicht angegeben ist ... vor 14 Jahren 0
http://developer.apple.com/mac/library/documentation/DeveloperTools/gdb/gdb/gdb_9.html war der Link, war es irgendwie kaputt? vor 14 Jahren 0
Nach etwas mehr Experimenten fand ich Folgendes: "dump binary memory ~ / dump3.bin 0 0x0000FFFF" erzeugte Daten, die nicht vollständig aus Nullen bestehen. Aber ... hier war nichts von Wert und es waren nur die ersten 64 KB. Dies ... "dump binary memory ~ / dump3.bin 0 0x000fFFFF" erzeugte eine Datei, die ausschließlich Nullen enthielt. 1 MB Nullen. Ich habe keine Idee warum. Meine Vermutung (bis jemand, der weiß, wie man gdb benutzt, tatsächlich hilft, ist), dass ich "ungenutzte" Regionen durchquert habe, die nicht einmal von malloc zugewiesen wurden. Aus diesem Grund gibt gdb Nullen aus. Schließlich enthält Safari mehr als 1 MB Daten;) vor 14 Jahren 0
Wenn ich die Regionen finden muss, die tatsächlich zugewiesen sind, und es möglicherweise Millionen von zugewiesenen Regionen gibt ... dann gibt es keine Möglichkeit, "dump" zu verwenden, um einen Coredump zu erhalten. Schade, dass es in gdb in OSX nichts wie gcore gibt. Gibt es eine Möglichkeit, einen Coredump in OS X zu erzwingen? Von außerhalb der GDB? vor 14 Jahren 0

5 Antworten auf die Frage

5
boytheo

Hallo alle zusammen, ich habe herausgefunden, wie man einen Coredump unter OSX generiert!

http://osxbook.com/book/bonus/chapter8/core/

Dort gibt es ein herunterladbares Programm in Quellform. Ich habe es heruntergeladen, kompiliert und, Hurra! Es funktionierte! Es generierte fast 1 GB Speicherabzug!

Ob die Informationen dort enthalten sind, ist jetzt völlig egal. Ich habe gelernt, wie man Coredumps unter OSX generiert. Dies ist definitiv eine praktische Fertigkeit als Softwareentwickler. Sie wissen nie, wann ein Core-Dump hilfreich sein könnte.

Ich kann mir nur ein paar Jahre vorstellen, dass ich einen wichtigen Job mache, und ich brauche einen Core-Dump, um herauszufinden, was los ist, und diese "Gcore" -App ist das, was ich brauchte. Auch wenn es sich einmal lohnt ... das ist eine gute Sache.

Sie können es auch installieren mit: brew install gcore Guido vor 10 Jahren 1
Sie können diese Anweisungen [hier] (http://macappstore.org/gcore/) verwenden, um gcore schnell zu installieren. Wenn "bash: brew: command not found" angezeigt wird, installieren Sie Homebrew mit [this link] (http://coolestguidesontheplanet.com/installing-homebrew-os-x-yosemite-10-10-package-manager-unix- apps /). I'm_With_Stupid vor 9 Jahren 0
[`gcore` ist in macOS enthalten] (https://opensource.apple.com/source/system_cmds/system_cmds-790.30.1/gcore.tproj/) seit 10.12 Sierra. Es befindet sich unter `/ usr / bin / gcore` und hat auch eine Manpage unter` / usr / share / man / man1 / gcore.1 '. Dies wird auch von Homebrew bestätigt, das [gcore] nicht installiert, um `gcore` zu` /usr/local/bin`????????????????????????????????????????????????? ) auf Sierra oder höher. GDP2 vor 6 Jahren 0
1
James

Safari speichert Formulardaten für alle Formulare (sofern Sie sie nicht deaktiviert haben oder das Formular das Formular als nicht zu speichern markiert) in einer verschlüsselten Datenbankdatei. Sie finden das Kennwort für die Datei in Ihrem Login-Schlüsselbund. Die Datei befindet sich unter. Sie ~/Library/Safari/Form Valueskönnen also theoretisch die Daten aus der Datei extrahieren und sehen, ob sich das eingegebene Dokument dort befindet.

Ich hatte jedoch einen Hack und ich kann nicht herausfinden, in welchem ​​Format die Datei ist oder wie sie verschlüsselt ist. Ich weiß also nicht, wie ich an den Inhalt herankommt.

Wenn Safari den Beitrag in dieser Datei gespeichert hat, können Sie ihn auch zurückholen, indem Sie dasselbe Formular aufrufen und die ersten Buchstaben des verlorenen Textes eingeben. Das Ganze sollte als Vorschlag für die automatische Vervollständigung erscheinen. vor 14 Jahren 0
Die automatische Vervollständigung funktioniert nicht für den Post-Inhalt. Es funktioniert nur für einzeilige Felder. Nicht ganze Artikel mit Hunderten von Zeilen. vor 14 Jahren 0
Vielen Dank. Ich bezweifle, dass diese Datei Postinhalt enthält. Ich habe es geschafft, 0 bis 7ffffFFFF auszugeben und eine 2 GB-Datei zu erstellen. Es schien jedoch völlig Nullen zu enthalten. Hier stimmt etwas nicht. Warum sollte dies ?: dump memory ~ / bla.bin 0 0x7fffFFFF Ergebnis in einer Datei, die vollständig Nullen enthält? Safari läuft nicht auf Nullen, oder? Ich gehe davon aus, dass es etwas Code enthalten muss. ;) vor 14 Jahren 0
0
alesplin

Sie können die Protokollierung in GDB immer aktivieren set logging on

Dann wird alles, was Sie tun, in die Protokolldatei (normalerweise gdb.txt) gedruckt. Sie können also einfach mit dem xBefehl den Speicher drucken und alles wird in die Protokolldatei und auf den Bildschirm verschoben.

0
ychaouche

Wenn OSX über einen pmap-Befehl verfügt, wird Ihnen der zugeordnete Speicher aller laufenden Prozesse angezeigt. In Linux-Systemen wird dies normalerweise aus / proc gelesen. Wenn Sie als Nächstes nach bestimmten Informationen suchen, können Sie den Befehl gdb find verwenden. Geben Sie help in gdb ein, um weitere Anweisungen zu erhalten.

-1
lornix

Ich weiß, alter Faden ...

gdb verfügt über einen integrierten Befehl, um ein Kernabbild des aktuellen Prozesses / Programms zu sichern.

generate-core-file [filename] gcore [filename] 

Beide Befehle machen dasselbe, der Dateiname ist optional, der Standardwert ist ' core. <process_ip> '.

Huh! Es sieht so aus, als wäre sogar ein Dienstprogramm (mit gdb) namens 'gcore' installiert, um auch ein aktuell ausgeführtes Programm zu sichern. Natürlich ist es einfacher, den Prozess mit gdb anzuhalten und ihn dann zu sichern.

Jeden Tag neue Dinge finden! ... aber gdb hat die eingebaute Funktion ... so wissen Sie es ..

`(gdb) gcore Undefinierter Befehl:" gcore ". Versuchen Sie "Hilfe". (gdb) Befehl "generate-core-file Undefined": "generate-core-file". Versuchen Sie "Hilfe". ` Slipp D. Thompson vor 11 Jahren 0
http://sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.html scheint darauf hinzudeuten, dass es nicht unter OS X implementiert ist. Slipp D. Thompson vor 11 Jahren 2