2011-07-20 6 views
0

メッセージ(エラー、警告など)をログファイルに報告するときに、現在__PRETTY_FUNCTION__を使用しています。これにより、どの機能がエラーメッセージを作成したかについて混乱が生じないようになります。ランタイム実行前​​の__PRETTY_FUNCTION__の値を確認する

現時点では、私は自動的にログファイルから出力を取り出し、最初に作成したコードとリンクしてください。問題は、ログファイル内の出力__PRETTY_FUNCTION__をコード内の関数の名前と照合する効率的な方法を決定できないということです。

最初は、gcc -Eを使用して、すべてのマクロ定数/プリプロセッサコンポーネントを展開し、ログファイルの出力を元のコードと直接比較できることを期待していました。しかし、__PRETTY_FUNCTION__はマクロ定数ではありません。明らかに実行時に決定される変数です。したがって、gcc -Eは機能しません。 http://gcc.gnu.org/onlinedocs/gcc/Function-Names.htmlから

これらの識別子はプリプロセッサマクロではありません。 GCC 3.3以前では、 (Cのみ)では、__FUNCTION____PRETTY_FUNCTION__は文字列 リテラルとして扱われました。 char配列を初期化するために使用でき、 を他の文字列リテラルと連結することができます。 GCC 3.4以降では、__func__のように、 を変数として扱います。 C++では、__FUNCTION____PRETTY_FUNCTION__は常に変数になっています。

__PRETTY_FUNCTION__の出力を元のコードの機能と効率よく一致させる方法に関するアイデアはありますか?

+4

? – bdonlan

+0

@bdonlan - 私はそれらが利用可能であることを知らなかった。この場合、追加機能をロガーに追加する必要がありますが、これは可能ですが推奨されません。 – BSchlinker

+2

マッチアップとはどういう意味ですか?コード内の行を探しますか?もしそうなら、なぜあなたは '__FILE__'と' __LINE__'もログに記録しませんか? – Nobody

答えて

2

__PRETTY_FUNCTION__は通常、ソースコード内の場所を識別するために__FILE____LINE__で使用されます。

詳細はStandard Predefined Macrosを参照してください。

関連する問題