Як скинути пам'ять у файл у gdb (osx)? Потрібно врятувати мою роботу


9

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

Я ввів gdb attach 6741 (мій PID сафарі).

А тепер що?

Я спробував шукати допомогу в gdb в google, але я не зміг знайти нічого, що б підказало мені, що робити, навіть під час пошуку "як скинути пам'ять в gdb" :(

Я спробував "допомогти скинути", це дало мені купу команд, але жодна з них не спрацювала. Найближчий до мене:

(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 ТУТ)" не створить основний дамп.

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 ..
macos  gdb 

1
+1 прихильність співчуття - Я не налаштований на перспективи відновлення даних, враховуючи те, що ви вже намагалися. Але це законний налагоджувальний запит, чітко написаний, з відповідними деталями: Я не думаю, що це заслуговує на те, щоб його зволікали!
Джим Льюїс

NSD. Як ти знайдеш кінець купи? Яку команду потрібно ввести, щоб повернути вам номер? Ви насправді знаєте? Або ти просто намагаєшся не допомогти мені?

Це не дуже добре працює. Я спробував це: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Тому я набрав "gcore bla2.bin". І здогадуюсь, я отримую? "Не визначена команда:" gcore ". Спробуйте" help "." Документи Apple кажуть, що ця функція недоступна в деяких системах. Я думаю, що це означає і Маки? Цікаво, чому в документі Apple з'явиться загальна інформація про unixy gdb, яка не визначає поведінку OSX ...

developer.apple.com/mac/library/documentation/DeveloperTools/… було посилання, якимось чином воно зламалось?

Після трохи більше експериментів я виявив таке: "dump binary memory ~ / dump3.bin 0 0x0000FFFF" видав деякі дані, які були не зовсім нулями. Але ... тут нічого цінного не було, і це було лише перші 64 КБ. Цей ... "dump binary memory ~ / dump3.bin 0 0x000fFFFF" створив файл, що повністю містить нулі. 1 Мб нулів. Я поняття не маю, чому. Моя здогадка (поки хтось, хто знає, як використовувати gdb, насправді не допомагає), полягає в тому, що я перетнув "невикористані" регіони, які навіть не виділили malloc. І через це gdb видає нулі. Зрештою, Safari містить більше 1 МБ даних;)

Відповіді:


6

Привіт усім, я знайшов, як створити coredump на OSX!

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

Існує програма, яку можна завантажити, у вихідному вигляді. Я завантажив його, склав, і, ура! Це спрацювало! Це створило майже 1 Гб основного дампа!

Про те, чи є там інформація чи ні, не зовсім важливо. Я дізнався, як генерувати coredumps на OSX, що, безумовно, може бути корисним навиком розробника програмного забезпечення;) Ніколи не знаєш, коли базовий дамп може стати в нагоді.

Я просто можу собі уявити, як я кілька років займаюся важливою роботою, і мені потрібен основний дамп, щоб зрозуміти, що відбувається, і це "gcore" додаток - те, що мені потрібно. Навіть якщо він окупиться один раз ... це хороша річ.


1
Ви також можете встановити його за допомогою: brew install gcore
Guido

Ви можете скористатися цими інструкціями тут, щоб швидко встановити gcore. Якщо сказано, що "bash: brew: команда не знайдена", тоді встановіть homebrew за цим посиланням .
I_With_Stupid

gcoreвходить у macOS з 10.12. Сьєрра. Він розташований за адресою, /usr/bin/gcoreа також має сторінку користувача /usr/share/man/man1/gcore.1. Це додатково підтверджується Homebrew , який відмовляється встановити gcoreв/usr/local/bin на Sierra або вище.
ВВП2

1

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

Однак у мене був злом, і я не можу розібратися, який формат файлу або як він зашифрований, тому я не знаю, як насправді потрапити на вміст, я впевнений, що хтось робить :)


Якщо Safari зберегла публікацію у цьому файлі, ви також можете її повернути, просто перейшовши до тієї самої форми та набравши перші кілька літер втраченого тексту. Цілий повинен спливати як пропозиція про автозаповнення.

Функція автоматичного завершення не працює для вмісту публікації. Він працює лише для однорядних полів. Не цілі статті із сотнями рядків.

Дякую. Я сумніваюся, що цей файл містить вміст публікації. Мені вдалося скинути 0 до 7ffffFFFF, створивши файл 2 Гб. Однак, здавалося, він містить цілі нулі. Щось тут не зовсім правильно. Чому це ?: дамп-пам'ять ~ / bla.bin 0 0x7fffFFFF Результат у файлі, що повністю містить нулі? Сафарі не працює на нулях, чи не так? Я припускаю, що у нього повинен бути якийсь код? ;)

0

Ви завжди можете ввійти в систему в GDB set logging on

Потім все, що ви робите, друкується у лог-файл (зазвичай gdb.txt). Тож ви можете просто почати друкувати пам'ять за допомогою xкоманди, і все піде на файл журналу, а також на екран.


0

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


-1

Я знаю, стара нитка ...

gdb має вбудовану команду для скидання основного зображення поточного процесу / програми.

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

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

Ага! виглядає, що навіть встановлена ​​утиліта (з gdb) під назвою "gcore" для скидання поточно запущеної програми. Звичайно, простіше призупинити процес з gdb, а потім скинути його.

Щодня шукаючи нові речі! ... але gdb має вбудовану функцію ... просто так ви знаєте ..


(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".
Сліп Д. Томпсон

2
sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.html начебто дозволяє припустити, що вона не реалізована в OS X.
Slipp D. Thompson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.