C++ 保存并重新启动暂停的gdb会话

C++ 保存并重新启动暂停的gdb会话,c++,debugging,gdb,C++,Debugging,Gdb,我的理解是gdb可以监视正在运行的程序的完整状态。我可以保存在断点处暂停的gdb会话并在以后继续会话吗 我的第一次尝试只是在第一个gdb会话中生成一个在断点处暂停的核心转储,然后使用核心转储启动第二个gdb会话 这导致了以下错误 Program terminated with signal SIGTRAP, Trace/breakpoint trap. 有趣的是,断点信息被插入到程序状态中。在第二次尝试时,我做了相同的操作,但这次我在第二次会话中添加了与第一次会话相同的断点 不过,我还是犯

我的理解是gdb可以监视正在运行的程序的完整状态。我可以保存在断点处暂停的gdb会话并在以后继续会话吗

我的第一次尝试只是在第一个gdb会话中生成一个在断点处暂停的核心转储,然后使用核心转储启动第二个gdb会话

这导致了以下错误

Program terminated with signal SIGTRAP, Trace/breakpoint trap.
有趣的是,断点信息被插入到程序状态中。在第二次尝试时,我做了相同的操作,但这次我在第二次会话中添加了与第一次会话相同的断点

不过,我还是犯了同样的错误

我可以保存并重新启动gdb会话吗?如果是,怎么做

我不认为这是直接相关的,但我也得到了这个警告

warning: core file may not match specified executable file.
gdb只是简单地说明这样的事情在一般情况下是可能的,还是gdb认为这可能发生在正在运行的会话中?我确信生成核心转储的可执行文件正在gdb下运行


编辑:对于其他人来说,这个问题:补充了Mats Peterson的答案和本文链接:这是一篇有趣的阅读。链接的问题还建议将流程封装在虚拟机中。

我怀疑这是否可行。保存核心文件时,程序已打开/创建的文件和任何其他资源(信号量、共享内存、串行端口、网络连接等)的句柄将丢失。你可以检查它,但不能“继续”。核心文件只是原始程序使用的所有内存的副本。当程序终止时,其他任何内容都将“丢失”。换句话说,核心文件只在以后检查时有用,但不能在核心文件调试会话中运行、单步执行或继续。只是“看东西”。如果不能执行,断点也不会真正起作用……;)

不幸的是,外部世界设计有很多全局变量,所以这在一般情况下无法工作。尽管如此,对于不访问外部资源的简单程序还是有可能的。但既然它对大多数程序都不起作用,为什么有人会花时间“修复”它,使它能够运行核心文件(当然,你的程序不仅仅是计算,例如使用输出?)。哈,是的,它可以:(如果您可以保存并加载内存状态,那么您的程序可以获得外部资源,然后重复加载/保存可能不会影响这些外部资源的有问题部分。或者,您可以让程序以可重启的形式存储其内部状态。这通常是这些类型问题的解决方式。)e在不容易重现问题时进行调试。。。