我需要知道如何将 Safari.app 中的内存转储到文件中。
我已经输入 gdb attachment 6741 (我的 safari PID)。
怎么办?
我尝试在 google 上搜索有关 gdb 的帮助,但是找不到任何告诉我该怎么做的内容,即使搜索“如何在 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/[电子邮件保护]/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 ..
答案1
我找到了如何在 OSX 上生成核心转储的方法!
那里有一个可下载的程序,源代码形式。我下载了它,编译了它,然后,哇哦!它成功了!它生成了近 1GB 的核心转储!
现在,这些信息是否存在并不重要。我学会了如何在 OSX 上生成核心转储,这对软件开发人员来说绝对是一项有用的技能 ;) 你永远不知道核心转储何时会派上用场。
我可以想象几年后我从事一项重要的工作,我需要一个核心转储来弄清楚发生了什么,而这个“gcore”应用程序就是我所需要的。即使它只带来一次回报……这也是一件好事。
答案2
Safari 将所有表单的表单数据(除非您将其关闭,或者网站将表单标记为不可保存)保存在加密数据库文件中。您可以在登录钥匙串中找到该文件的密码,该文件位于 ,因此~/Library/Safari/Form Values
理论上,您可以从文件中提取数据,并查看您输入的内容是否在其中。
但是,我被黑客入侵了,我无法弄清楚该文件是什么格式,或者它是如何加密的,所以我不知道如何真正获取其内容,但我相信有人知道:)
答案3
你可以随时在 GDB 中打开日志记录set logging on
然后,您所做的一切都会打印到日志文件(通常是 gdb.txt)。因此,您只需使用该x
命令开始打印内存,所有内容都会进入日志文件和屏幕。
答案4
我知道,老帖子……
gdb 有一个内置命令来转储当前进程/程序的核心映像。
generate-core-file [filename]
gcore [filename]
两个命令的作用相同,文件名是可选的,默认为'核心.<进程 ip>‘
嗯!看起来甚至安装了一个名为“gcore”的实用程序(带有 gdb),用于转储当前正在运行的程序。当然,使用 gdb 暂停进程然后转储它更容易。
每天都会发现新的东西!...但是 gdb 有内置的功能...你知道的..