核心转储消息不会在STDERR中捕获
core dumped message is not captured in STDERR
我曾经用bash shell中的这一行调用我的程序来捕获日志文件
中的所有标准输出和标准错误消息./a.out input.txt 2>&1 | tee log
日志文件没有显示错误,但是通过检查日志,很明显存在问题,程序在执行过程中突然终止。
我也试过这些,但结果是一样的:
./a.out input.txt > log 2>&1
./a.out input.txt |& tee log
在没有重定向的情况下运行
./a.out input.txt
我在我的终端窗口中看到错误消息:
*** Error in `./a.out': free(): invalid pointer: 0x000000000169b268 ***
Aborted (core dumped)
那么,为什么我不能在日志中捕获"core dumps"消息呢?我该怎么做呢?
这里有两个错误信息:
*** Error in `./a.out': free(): invalid pointer: 0x000000000169b268 ***
它来自glibc,如果当前tty存在,则在其上打印。
如果你想把它打印到stderr(无论stderr被重定向到哪里),你必须设置在启动程序之前,请先检查LIBC_FATAL_STDERR_
。例如在bash中do:
export LIBC_FATAL_STDERR_=1
另一条消息
Aborted (core dumped)
它来自启动程序的shell,通过shell检查wait()的状态。如果程序不是由shell运行的,或者是由已经终止的shell运行的,那么您将无法捕获该消息。即使shell没有终止,该shell的错误也不会重定向到您的日志文件。
你可以这样做:
{ ./a.out input.txt ; } >log 2>&1
参见./a的重定向。Out未捕获分段错误)
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 class4.exe.sta
- C++快速将 int 数组内容转储到文本文件中
- 合并排序:分段错误核心转储
- 核心转储消息不会在STDERR中捕获