【问题标题】:redirection of ./a.out is not capturing segmentation fault./a.out 的重定向未捕获分段错误
【发布时间】:2014-07-20 05:08:24
【问题描述】:

我运行命令

./a.out  output.txt
我希望也将错误放在output.txt
该命令的exit 状态为 139,在终端上其输出为:
分段错误(核心转储)

而文件output.txt 是空的。

【问题讨论】:

    标签: c++ c linux bash shell


    【解决方案1】:

    如果您想要来自a.out 的错误消息和字符串

    Segmentation fault (core dumped)
    

    要附加到output.txt,那么您还必须重定向shell 的stderr。例如,

    exec 2>> output.txt && ./a.out < in 2>&1 >> output.txt &
    

    这是因为 segfault 消息来自 shell 本身。

    【讨论】:

      【解决方案2】:

      消息Segmentation fault (core dumped)不是来自您的程序。

      它是由 shell 接收到的信号产生的。它不是您程序的 stderrstdout 的一部分。

      所以shell的消息可以被捕获为:

      { ./a.out; } 2> out_err 
      

      【讨论】:

      • bash: 意外标记 `}' 附近的语法错误是终端和 bash 的命令输出:{./a.out}: 没有这样的文件或目录是 output.txt 的内容。
      • @chandankharbanda 您需要在 {}; 之前和之后使用空格来终止命令(如我的帖子中所述)。我认为您正在以{./a.out} 2&gt;out_err 而不是{ ./a.out; } 2&gt;out_err 执行它。
      • 你知道了,我没有分别在 { 和 } 之后和之前使用空格。
      • 有趣的是,当我想通过使用{ ./a.out; } |&amp; tee out_err 语法来重定向 cout 和 cerr 同时将输出保留到终端时,这不起作用。
      猜你喜欢
      • 2014-10-30
      • 1970-01-01
      • 2023-03-04
      • 2012-01-08
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      相关资源
      最近更新 更多