我的理解是,gdb可以监视正在运行的程序的完整状态。我可以保存一个在断点处暂停的gdb会话并稍后恢复会话吗?保存并重新启动暂停的gdb会话
我的第一次尝试是在第一个在断点处暂停的gdb会话中生成核心转储,然后使用核心转储启动第二个gdb会话。
这导致了下面的错误。
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
因此,断点信息被插入程序状态,很有意思。在我的第二次尝试中,我做了同样的事情,但是这次我在第二次会话中添加了与第一次会话相同的断点。
Getting gdb to save a list of breakpoints?
不过,我得到了同样的错误。
我可以保存并重新启动gdb会话吗?如果是这样,怎么样?
我不认为这是直接相关的,但我也得到这个警告。
warning: core file may not match specified executable file.
gdb是简单地说这样的事情是可能的,或者gdb认为这可能发生在运行会话中吗?我相信,产生核心转储的相同可执行文件正在gdb下运行。
编辑:对于其他人来说,这个问题:Save a process' memory for later use?增加了Mats Petersson的答案和链接到这篇文章:http://blogs.msdn.com/b/oldnewthing/archive/2004/04/20/116749.aspx这是一个有趣的阅读。链接的问题也有将此过程包装在虚拟机中的建议。
外部世界确实不幸地被设计成具有很多全局变量,所以这通常不起作用。尽管如此,对于不能访问外部资源的简单程序应该是可能的。 – Praxeolitic
但是,由于它不适用于大多数程序,为什么有人花时间“修复”它以便它能够运行核心文件(当然,您的程序不仅仅是计算东西 - 例如使用输出?)。 –
哈,是的它确实:( 如果你可以保存和加载内存状态,你可以得到一个点,你的程序已经获得外部资源,然后反复加载/保存有问题的部分,可能不会影响这些外部资源 – Praxeolitic