我正在使用我拥有C ++源代码的程序的输出。程序将输出发送到stderr,我需要知道源代码中输出的计算位置和方式。
我知道向stderr发送内容的一种形式是
std::cerr << "foo";
我使用grep来查看是否使用了这个表单,但我找不到它。
我知道这是写给stderr的,因为当我运行程序时,我得到了这种形式的输出:
./program 2> file-with-info.txt
是否还有其他方法可以将输出发送到stderr?任何人都可以建议我可以寻找的模式来找到这个输出的发送位置吗?
答案 0 :(得分:3)
不是
cerr < "foo"
但
cerr << "foo"
您也可以尝试grep for clog(重定向到标准错误流):
clog <<
您还可以搜索stderr和perror,它们是输出标准错误的旧C方式
答案 1 :(得分:2)
std::cerr
,std::clog
和stderr
这三个都表示标准错误流。前两个是(无缓冲和缓冲)C ++接口,第三个是旧的C stdio
接口。 perror
也会写入标准错误。
根据平台的不同,可能有更多方法输出到标准错误,例如在Unix上写入文件描述符2。 (如果你很幸运,你可以grep寻找符号常量STDERR_FILENO
。)
答案 2 :(得分:0)
最可靠的做法是挂钩写出的OS函数,如果它写入标准错误输出,则打破/打印callstack。如果您满足于其他任何目标,那么在没有找到确切字符串的情况下,可以输出十几种方法。