2011-06-20 12 views
2

私はC++ソースコードを持つプログラムの出力に取り組んでいます。プログラムはstderrに出力を送り、ソースコードで出力がどこでどのように計算されているかを知る必要があります。標準エラーに何かを送るための可能なフォーム

私は、このフォームが使用されているかどうかを確認するためにはgrepを使用しますが、私はそれを見つけることができませんstderrに何かを送信するための一つの形態は

std::cerr << "foo"; 

であることを知っています。

私はプログラムを実行すると、私はこの形式で出力を得るので、私はそれがstderrに書き込まれている知っている:

./program 2> file-with-info.txt 

はstderrに送られる出力のための他の方法はありますか?誰もがこの出力がどこに送られているかを見つけるためにgrepするパターンを提案できますか?

clog << 

あなたも検索できます。

+0

C++またはC#の回答をお探しですか? – karlphillip

答えて

3

それは

cerr < "foo" 

しかし

cerr << "foo" 

あなたはあまりにも(標準エラーストリームにリダイレクト)目詰まりをgrepしようとすることができませんstderrとperrorは標準エラーに出力する古いCの方法です

+0

"clog"、 "cerr"、 "stderr"という単語で検索しようとしています。私はこのコマンドで見つけます: 'find /ディレクトリとソースコード/ -exec grep"という単語 "{} \;'。 –

2

std::cerr,std::clogおよびstderrすべてが標準エラーストリームを示す。最初の2つはバッファされていない(バッファされていない)C++インターフェイスで、3つ目は古いC stdioインターフェイスです。 perrorも標準エラーに書き込みます。

プラットフォームによっては、Unixのファイル記述子2への書き込みなど、標準エラーに出力する方法がさらにある場合があります。

+0

"clog"、 "cerr"、 "STDERR"、 "stderr"という単語で検索しようとしています。私はこのコマンドで見つけます:ソースコードを使ってディレクトリを探します/ -exec grep "word" {} \; \ nGnu-Linux(Fedora 14)のマシンで働いています –

+0

@BruceWarrier: 'grep -r'はずっと簡単です。つまり、ソースファイルの 'stderr'に現れるものをgrepしてみてください。 –

+0

@BruceWarrior:また、perrorを忘れないでください。 –

0

最も信頼できるのは、書き出すOS関数をフックすることです。標準エラー出力に書き込む場合は、break /コールスタックを印刷します。あなたが他の何かのために解決すれば、それは正確な文字列を見つけることなく出力することができる十数の方法があります。

関連する問題