c – 保存并重新启动暂停的gdb会话

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

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

Saving core file in 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这是一个有趣的读物.链接的问题还建议将进程包装在VM中.

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

点赞