Gdb 从核心文件恢复程序状态

Gdb 从核心文件恢复程序状态,gdb,coredump,Gdb,Coredump,在任何情况下,是否可以将程序的状态恢复到核心文件生成期间的状态 我询问的原因是为了利用gdb执行函数等的能力,您需要有一个正在运行的实例。当然,应该可以生成同一可执行文件的模拟进程,并将状态设置为核心的内容 如果不是的话,对于让我首先想做这件事的那种情况,有什么选择呢?在这种情况下,内核的回溯导致了一个库函数,我想将输入复制到此函数调用,但其中一个输入是复杂对象,它可以通过运行实例中的函数调用轻松地序列化为字符串,但在内核转储中却不是这样。核心文件已经做到了这一点?如果使用原始可执行文件和核心文

在任何情况下,是否可以将程序的状态恢复到核心文件生成期间的状态

我询问的原因是为了利用gdb执行函数等的能力,您需要有一个正在运行的实例。当然,应该可以生成同一可执行文件的模拟进程,并将状态设置为核心的内容


如果不是的话,对于让我首先想做这件事的那种情况,有什么选择呢?在这种情况下,内核的回溯导致了一个库函数,我想将输入复制到此函数调用,但其中一个输入是复杂对象,它可以通过运行实例中的函数调用轻松地序列化为字符串,但在内核转储中却不是这样。

核心文件已经做到了这一点?如果使用原始可执行文件和核心文件加载gdb

gdb myprogram.exe -c mycorefile
然后它会到达坠毁的地方。您可以使用所有常规检查功能来查看变量、查看堆栈跟踪等


还是我误解了你的问题?

理论上完全可以做你想做的事,但是(AFAICT)在
GDB
(目前)中没有支持这一点


您最好使用
GDB-7.0
并使用其嵌入式python脚本重新实现序列化功能。

调试核心文件时,您不能在GDB中执行函数。假设我有一个核心文件,找到一个复杂类Foo的变量,我想执行Foo.getSerialization()来获得一个简单的字符串表示形式,我不能,因为它不是一个正在运行的进程。所以问题是一个进程能否从核心转到一个运行的进程。您可以编写一些代码,使gdb具有漂亮的打印值。请参见此处的Python API()。@JeffFoster我认为这真的没有帮助,如果您想调用任何活动函数,这是不可能的。谢谢-我不知道Python脚本是否能够实现我想要的功能,但它听起来仍然非常有用。