我可以使用重定向程序的标准输出和标准错误./a.out > output.txt 2> error.txt
但这些不会像segmentation faults
.
所以我发现
{ ./a.out < $TEST_DIR'test'$i'.in' > $OUTPUT_DIR/output$i.txt ; } 2> $OUTPUT_DIR/error$i.txt
然而,核心转储和堆栈粉碎消息没有被重定向。
如何重定向它们?
答案1
“分段错误”消息不是由出错程序打印的,而是由 shell 打印的。
& backtrace + memmap消息*** stack smashing detected ***
(至少在我的系统上)由堆栈保护器处理程序直接打印到控制终端(_PATH_TTY
/dev/tty
直接打开,不考虑 stdout 或 stderr,然后消息写入那里 - 请参阅fortify_fail.c和libc_fatal.c在 glibc 中)。
如果您想捕获整个事情,请使用 script(1) (例如script -c './rpneval ...'
)或类似的东西运行您的程序。