Linux 如何从gdb内部自动重新连接到valgrind控制的流程?

Linux 如何从gdb内部自动重新连接到valgrind控制的流程?,linux,segmentation-fault,gdb,valgrind,Linux,Segmentation Fault,Gdb,Valgrind,我犯了一个很难调试的内存错误,每隔几次命令行运行就发生一次,每次运行大约需要两个小时才能完成。因此,我认为创建如下日志可能是一个好主意: while true; do valgrind ./command 2>&1 | tee command grep -q Invalid && break done 问题是我的调试日志和Valgrind生成的堆栈跟踪不够,所以我决定将--vgdb error=0添加到命令行。不幸的是,由于Valgrind现在在启动时添

我犯了一个很难调试的内存错误,每隔几次命令行运行就发生一次,每次运行大约需要两个小时才能完成。因此,我认为创建如下日志可能是一个好主意:

while true; do 
  valgrind ./command 2>&1 | tee command
  grep -q Invalid && break
done
问题是我的调试日志和Valgrind生成的堆栈跟踪不够,所以我决定将
--vgdb error=0
添加到命令行。不幸的是,由于Valgrind现在在启动时添加了一个断点,因此我需要运行以下程序:

$ gdb ./command
...gdb init string follows...
(gdb) target remote | /usr/lib/valgrind/../../bin/vgdb
Remote debugging using | /usr/lib/valgrind/../../bin/vgdb
relaying data between gdb and process 4361
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
[Switching to Thread 4361]
0x04000840 in ?? () from /lib/ld-linux.so.2
(gdb) continue
Continuing.

如何编写该进程的脚本,使Valgrind在启动时不会中断,或者脚本一直附加到vgdb进程,并告诉它们继续,直到其中一个进程异常完成?

Valgrind停止程序并附加调试器之前,它的参数--vgdb error是预期的错误数。如果将其设置为
0
,则它将在运行程序之前立即停止。您需要
--vgdb error=1
,它将运行到第一个错误,然后停止。然后可以附加调试器。

如果一切顺利,我将在
继续之后“关闭远程连接”。为什么不使用--vgdb error=1,然后在出现错误后附加调试器?