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

时间:2014-06-27 07:13:57

标签: c++ debugging 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中。

1 个答案:

答案 0 :(得分:2)

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