如果我从
shell运行程序,并且它是segfaults:
$buggy_program Segmentation fault
然而,它会告诉我有没有办法让程序打印回溯,也许是通过运行这样的东西:
$print_backtrace_if_segfault buggy_program Segfault in main.c:35 (rest of the backtrace)
我也不愿意使用strace或ltrace来获取这类信息,因为它们会以任何方式打印……
解决方法
可能有更好的方法,但这种自动化方式.
将以下内容放在〜/ backtrace中:
backtrace quit
将它放在路径中目录中名为seg_wrapper.sh的脚本中:
#!/bin/bash ulimit -c unlimited "$@" if [[ $? -eq 139 ]]; then gdb -q $1 core -x ~/backtrace fi
ulimit命令使得核心被转储. “$@”是给脚本的参数,因此它将是您的程序及其参数. $?保持退出状态,139似乎是我的机器的段错误的默认退出状态.
对于gdb,-q表示安静(无介绍消息),-x告诉gdb在给定文件中执行命令.
所以要使用它你只需:
seg_wrapper.sh ./mycommand and its arguments
更新
您也可以编写一个执行此操作的信号处理程序,请参阅this link.