如何自动且非交互地获取源代码中触发分段错误的位置?

How to automatically, and non-interactively, get where in the source code a segmentation fault is triggered?

我正在开发一个自动化测试工具,它发现了通常表现为分段错误的错误。我试图找出这些检测到的错误中有多少是独一无二的。唯一性是我研究中使用的一个特殊术语:如果两个段错误是由不同的语句触发的,则认为两者是不同的。我目前判断两个分段错误是否由不同语句触发的方法是使用 GDB。例如:

(gdb) r

Program received signal SIGSEGV, Segmentation fault.
0x00007f050c9efac2 in gsl_stats_quantile_from_sorted_data (sorted_data=sorted_data@entry=0x7fffe1477c40, stride=stride@entry=1,
    n=n@entry=5, f=675) at quantiles_source.c:37
37        result = sorted_data[lhs * stride]

如您所见,GDB 在出现段错误的地方停止(C 程序的第 37 行 quantiles_source.c,如上所示)。我想知道如何通过命令行或脚本以非交互方式获取该信息?

您可以 运行 gdb non-interactive 通过执行文件中指定的命令 -x file,或者您可以指定命令 -ex command ](如果需要可多次使用)。在任何一种情况下,当与 --batch 结合使用时,它随后都会退出。另一种选择是将您的 shell 配置为允许使用上述参数在二进制文件和生成的核心文件上使用 ulimit -c ulimited 然后 运行 gdb 转储核心文件。