2009-04-06 10 views
1

実行時にデータや文字列や状態を出力するためのロギング/トレースシステムがたくさんあります。これらのほとんどは、あなたがライブで見ることができる任意の文字列を印刷することができます。C++アプリケーションのより豊富なロギング/トレーシングステータス

Smartinspectのこれをより高いレベルにするように見えるので、ログごとにスタックトレースを表示し、時間とともに変化するグラフやデータ値をプロットするような好きなオプションや、出力テキスト文字列の単純なリストの基本的な考え方。

私はC++を使用しているので、Smartinspectは私にとっては機能しません。

ほとんどのグーグルがフレームワークを検出していますが、テキストダンプ以外の何もしていないものはありません。よりスマートなツール(Smartinspectに似ていますか?)が多いですか?商用またはオープンソースは問題なく、マルチプラットフォームは大きなプラスです。

答えて

4

私はこれがあなたが探している答えではないことを知っていますが、私はそのようなフレームワークがC++を見つけるのは非常に難しいとは言えません。スタックをダンプするようなことは、Javaのような言語でできるように、移植可能な方法では行えません。Javaのような言語では、すべてのプラットフォームで共通のランタイムを共有するだけでなく、強力なイントロスペクション機能も提供します。

私はJavaでプログラミングしませんが、私はPythonと同じ方法でスタックトレースを提供できると考えています。おそらく、スタックは実行時に検査と操作が可能な別のオブジェクトです。

C++にはこれらの素晴らしさがありません。それは基本的にオブジェクト指向性をC言語に追加するためのものです。(私は他の人がはるかに巧妙な説明C++のメリットはC以上ですが、別の議論があります)。

要するに、C++は、一般的な方法で必要とする種類の機能を提供するのに必要なレベルでは十分に豊富ではありません。定義済みのポイントでこの情報を取得できるプラットフォーム固有のコードがいくつかあるかもしれませんが、それは確かに標準に準拠したクロスプラットフォームのC++ではありません。

グラフなどに関しては、後処理のように聞こえますが、それは何かを見つけることができるか、あるいはおそらく、あなたのログメッセージをいくつかの形式で解釈できる形式で出力する可能性がありますこれらの既存のツールの

あなたが見ることができる他のものは、syslogdと統合されています。これには、さらに豊富な分析ツールがあります(これは、SmartInspectのためにアドバタイズされたものベースのロギング)。

NB:C++についてここで述べたことの多くは、C++でうまくいくフレームワークを見つけようとしている過去の経験から得られたもので、イントロスペクティブ型のもの(適切なモックオブジェクトなど)です。

0

自分自身を特定のプラットフォームに制限できる場合は、スタックトレースを手動でログに追加できます。例えば、 glibcの機能は、Linux上でスタックトレースを取得して、スタックトレースを例外クラスに追加します。同様の機能がWindows上で利用可能ですが、これらのインフラストラクチャはポータブルではありません。

2

私は数年前にDDJでWindowsとUnix/LinuxでC/C++でスタックをダンプする方法についての記事を書いていました。多分それはあなたを助けます:

http://www.ddj.com/architect/185300443

+1

1を参照してください、リンカによって生成マップファイルを使用すると、面白いアプローチです! –

関連する問題