Как сделать дамп памяти в файл в GDB (OSX)? Нужно спасти мою работу

13523

Мне нужно знать, как я могу сбросить память в Safari.app, в файл.

Я ввел gdb attach 6741 (мой PID для сафари).

Что теперь?

Я попытался найти справку в gdb в google, но не смог найти ничего, что подсказывало бы мне, что делать, даже при поиске «как сбросить память в gdb» :(

Я попробовал «help dump», он дал мне кучу команд, но ни одна из них не сработала. Самое близкое, что я пришел, было:

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

Так какой же адрес? Я не знаю? Как мне узнать адрес остановки? Я попытался найти в Google "" отсутствующий стоп-адрес "GDB", это не помогло. Я понятия не имею, как я могу получить адрес остановки.

Я попробовал это:

(gdb) дамп памяти ~ / safaridump.bin 0 0xffffffff

Это тоже не сработало.

Я получил это:

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 

Я действительно не понимаю этого. Все, что я хочу, - это моя память в Safari, записанная в файл.

Это действительно важно для меня. Я провел около 2 часов, печатая свое бедное сердце в Safari, записывая действительно важную информацию. И затем глупый веб-сайт, на котором я писал, не принял мой пост, потому что я так долго писал его, что я «вышел». К тому времени, как я вернулся, мой пост был потерян.

Я действительно хочу эту запись обратно. Все, что мне нужно, - это память от Safari, поэтому я могу искать по ее содержимому по нескольким ключевым словам, чтобы посмотреть, смогу ли я вернуть свои записи.

Любые идеи кто-нибудь?

По крайней мере, даже если я не верну свои письма, я кое-что узнаю о GDB. Что может пригодиться в моей разработке программного обеспечения;)

Спасибо, если вы можете помочь! Это будет так много значить для меня. Я собираюсь оставить Safari и GDB работающими, пока не получу ответ. Я не позволю этому уйти, пока я не узнаю, что могу или не могу вернуть свои письма.

Если кто-то хочет дать более общие ответы о том, как восстановить потерянную работу ... это хорошо. Например, программы для поиска по всему моему жесткому диску определенных строк, которые могли быть в VRAM до того, как работа была потеряна.

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html На этой странице сказано, что kill -9 не создает дамп ядра. Несмотря на то, что на этой странице написано http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS, эта команда "kill -ABRT (PID HERE)" не создаст дамп ядра.

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 отзыв сочувствия - я не оптимистично оцениваю перспективы восстановления ваших данных, учитывая то, что вы уже пробовали. Но это законный отладочный вопрос, четко написанный, с соответствующими деталями: я не думаю, что он заслуживает того, чтобы его опровергли! Jim Lewis 14 лет назад 1
НРД. Как вы находите конец кучи? Какую команду вы должны набрать, чтобы получить возвращенное вам число? Вы на самом деле знаете? Или ты просто пытаешься мне не помочь? 14 лет назад 0
Это не очень хорошо работает. Я попробовал это:Поэтому я набрал "gcore bla2.bin". И угадайте, я получу? "Неопределенная команда:" gcore ". Попробуйте" help "." Документы Apple говорят, что эта функция недоступна в некоторых системах. Я думаю, это означает, что Mac тоже? Интересно, почему документы Apple содержат общую информацию о Unixy GDB, которая не определяет поведение OSX ... 14 лет назад 0
http://developer.apple.com/mac/library/documentation/DeveloperTools/gdb/gdb/gdb_9.html была ссылка, каким-то образом она сломалась? 14 лет назад 0
Немного поэкспериментировав, я обнаружил, что: «dump двоичная память ~ / dump3.bin 0 0x0000FFFF» выдает некоторые данные, которые не являются полностью нулями. Но ... здесь не было ничего ценного, и это были только первые 64 КБ. Это ... "dump bin memory ~ / dump3.bin 0 0x000fFFFF" создает файл, полностью содержащий нули. 1 МБ нулей. Понятия не имею почему. Я предполагаю (до тех пор, пока кто-то, кто знает, как использовать gdb, действительно поможет), я пересекал «неиспользуемые» области, которые даже не были распределены malloc. И из-за этого GDB выводит нули. В конце концов, Safari содержит более 1 МБ данных;) 14 лет назад 0
Если мне нужно найти регионы, которые фактически выделены, и потенциально есть миллионы выделенных областей ... тогда я не смогу использовать «dump» для получения coredump. Жаль, что ничего подобного gcore не существует в gdb в OSX. Есть ли способ заставить coredump в OS X? Из-за пределов ГБД? 14 лет назад 0

5 ответов на вопрос

5
boytheo

Привет всем, я нашел, как генерировать coredump на OSX!

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

Там есть загружаемая программа в исходном виде. Я скачал, скомпилировал и, ура! Это сработало! Он генерировал дамп ядра почти в 1 ГБ!

Имеет ли информация там не очень важно сейчас. Я узнал, как генерировать coredumps на OSX, что определенно может быть полезным навыком для разработчика программного обеспечения;) Вы никогда не знаете, когда дамп ядра может пригодиться.

Я могу себе представить, что несколько лет я выполняю важную работу, и мне нужен дамп ядра, чтобы выяснить, что происходит, и это приложение "gcore" - то, что мне нужно. Даже если это окупится один раз ... это хорошо.

Вы также можете установить его с помощью: brew install gcore Guido 9 лет назад 1
Вы можете использовать эти инструкции [здесь] (http://macappstore.org/gcore/) для быстрой установки gcore. Если он говорит, что «bash: brew: команда не найдена», установите homebrew, используя [эту ссылку] (http://coolestguidesontheplanet.com/install-homebrew-os-x-yosemite-10-10-package-manager-unix- Программы/). I'm_With_Stupid 8 лет назад 0
[`gcore` включен в macOS] (https://opensource.apple.com/source/system_cmds/system_cmds-790.30.1/gcore.tproj/) начиная с 10.12 Sierra. Он расположен в `/ usr / bin / gcore`, а также имеет справочную страницу в` / usr / share / man / man1 / gcore.1`. Это также подтверждается Homebrew, который [отказывается устанавливать `gcore` в` /usr/local/bin`](https://github.com/Homebrew/homebrew-core/blob/bc64d3d55e4031693afc5b14df8bf61c1c978630/Formula/gcore.bb. ) на Сьерра или выше. GDP2 5 лет назад 0
1
James

Safari сохраняет данные формы для всех форм (если вы не отключили их или сайт не пометил форму как не подлежащую сохранению) в зашифрованном файле базы данных. Вы можете найти пароль для файла в вашей цепочке для ключей входа в систему, и файл находится по адресу ~/Library/Safari/Form Values, так что теоретически вы можете извлечь данные из файла и посмотреть, есть ли то, что вы ввели там.

Тем не менее, у меня был взлом, и я не могу понять, какой формат файла или как он зашифрован, поэтому я не знаю, как на самом деле получить содержимое, я уверен, что кто-то делает, хотя :)

Если Safari действительно сохранил сообщение в этом файле, вы также можете получить его обратно, просто перейдя в ту же форму и напечатав первые несколько букв потерянного текста. Весь должен появиться как предложение автозаполнения. 14 лет назад 0
Автозаполнение не работает для публикации контента. Это работает только для однострочных полей. Не целые статьи с сотнями строк. 14 лет назад 0
Благодарю. Я сомневаюсь, что этот файл содержит содержание сообщения. Мне удалось сбросить 0 до 7ffffFFFF, создав файл 2 ГБ. Тем не менее, он, казалось, содержал полностью нули. Что-то здесь не совсем так. С чего бы это ?: dump memory ~ / bla.bin 0 0x7fffFFFF Результат в файле, полностью содержащем нули? Safari не работает на нулях, не так ли? Я предполагаю, что в нем должен быть какой-то код? ;) 14 лет назад 0
0
alesplin

Вы всегда можете включить вход в GDB set logging on

Затем все, что вы делаете, выводится в файл журнала (обычно это gdb.txt). Таким образом, вы можете просто начать печать памяти с помощью xкоманды, и все будет идти в файл журнала, а также на экран.

0
ychaouche

Посмотрите, есть ли в OSX команда pmap, она покажет вам отображенную память любого запущенного процесса. Обычно это читается из / proc в системах Linux. Далее, если вы ищете конкретную информацию, вы можете использовать команду gdb find. Введите help find в gdb для получения дополнительных инструкций.

-1
lornix

Я знаю, старая тема ...

GDB имеет встроенную команду для вывода образа ядра текущего процесса / программы.

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

обе команды выполняют одно и то же, имя файла является необязательным, по умолчанию используется значение « core. <process_ip> »

Ха! Похоже, что даже установлена ​​утилита (с gdb) с именем 'gcore', которая также выводит запущенную программу. Конечно, проще приостановить процесс с помощью GDB, а затем сбросить его.

Находить новые вещи каждый день! ... но GDB имеет встроенную функцию ... просто так ты знаешь ..

`(gdb) gcore Неопределенная команда:" gcore ". Попробуйте "помочь". (gdb) generate-core-file Неопределенная команда: "generate-core-file". Попробуйте "помочь". ` Slipp D. Thompson 11 лет назад 0
http://sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.html, похоже, предполагает, что он не реализован в OS X. Slipp D. Thompson 11 лет назад 2