将执行错误重定向到文件c ++

时间:2014-12-17 19:52:03

标签: c++ linux bash stdout stderr

如何在bash中重定向c ++可执行文件的执行错误?我发现2>在尝试识别编译错误时有所帮助:

g++ example.cpp 2> compErr.txt

但是使用该命令运行可执行文件仍然会将错误发送到stdout:

$ ./a.out 2> e.txt
Floating point exception (core dumped)

2 个答案:

答案 0 :(得分:6)

实际上,错误"浮点异常(核心转储)" 来自可执行文件但来自shell!来自bash的消息不会被输出重定向抑制,但有一个标志可以启用/禁用这些消息。

您可以为某些错误安装信号处理程序,这些错误会导致程序退出并将某些内容写入合适的目标位置。有些信号无法截获,有些信号难以处理。这是您可以在代码中执行的方法。

如果你想更进一步,首先可以 fork()你的程序,并在子进程中完成实际的工作。对于子进程,父进程基本上只有waitpid(),并使用收到的结果结构中的信息向文件报告错误。

答案 1 :(得分:2)

我在终端找到了一些有用的东西,在这里:http://bytes.com/topic/c/answers/822874-runtime-error-stderr-gcc-ubuntu-bash

总之,一位与会者解释说:

  

在这种特殊情况下,字符串"浮点异常"不是重定向的是它不是由运行./ {file}的进程或它调用的任何东西生成的。相反,它是由命令解释器本身生成的。

     

你可以通过告诉命令解释器运行另一个命令解释器,重定向这个子解释器的错误输出来看到这一点。但是,需要一些>技巧:

$ bash -c './{file}; true' >out 2>err    
$ cat out
$ cat err
bash: line 1: 28106 Floating point exception./test_fail