是否可以配置GDB,以便在正常程序终止时自动退出?

问题描述:

我正在调试OSX上的一个shell脚本,中间有神秘的segfault。如果在脚本之外执行,则有问题的命令不会发生段错误。是否可以配置GDB,以便在正常程序终止时自动退出?

所以我需要以附加GDB的脚本运行所有程序,所以我可以调试此段错误。是否可以配置GDB,这样它将运行程序并退出程序正确终止?我曾尝试下面的代码:

echo file ifconfig > gdbcfg 
echo run >> gdbcfg 
echo quit >> gdbcfg 
gdb -x gdbcfg 

但这不是工作,因为GDB尝试应用正常终止:(前执行quit命令是否有可能以某种方式指示GDB等待应用程序正常终止,之后退出。 ?

也许我的做法是太情结,它只是一些GDB标志像“加载和运行该应用程序,退出如果一切正常”?

为什么不只是使这一进程转储核心文件,并对其进行分析后来用gdb?我的意思是ulimit -c unlimited然后(在核心被转储后)gdb ./process核心?

+0

我用nix工具链不太好,所以这个方法在技术上对我很难,问题太多。我不知道如何让shell脚本在第一段错误后停止(以及第一段后面的段错误在哪里)。我不知道如何正确地转储核心并将其加载回GDB。所以我认为就在每个应用程序开始之前,在shell脚本中,并打入GDB将是最简单的解决方案:)。 – grigoryvp 2012-03-13 16:44:43

+0

ulimit -c unlimited将强制崩溃进程转储名为“core”的核心文件。你可以让你的脚本在每个命令后检查“核心”文件,如果存在则退出(如果[-f core];然后退出; fi)退出。然后运行gdb,第一个参数是崩溃的进程,第二个参数是核心文件名(“core”)。就这样。 – strkol 2012-03-13 16:56:34

但是,这是行不通的,因为GDB试图执行应用程序终止

之前没有退出命令:它不工作,因为(假设您贴上您实际码)gdbcfg包含单个quit后你的命令被执行(并且没有run)。你想要的是:

echo file ifconfig > gdbcfg 
echo run >> gdbcfg 
echo quit >> gdbcfg 
gdb -x gdbcfg 

拼出一个更UNIXy方法是:

echo >gdbcfg <<EOF 
file ifconfig 
run 
quit 
EOF 

gdb -x gdbcfg 

更新:

如果gdbcfg文件内容包含所有三个命令,那么你的理解问题是不正确:在执行下一个命令之前,GDB将等待每个命令完成。

+0

对不起,这是在这里发布的代码示例中的拼写错误。实际文件是用vi编辑的,并且有全部3个命令:(P.S.ЗатрюксEOFспасибо,как-тояпрогляделтакойочевидныйспособиспользованияheredoc :) – grigoryvp 2012-03-13 16:55:07