1

プログラムの実行時にデータや文字列、または状態を出力させるためのロギング/トレースシステムはたくさんあります。これらのほとんどを使用すると、ライブまたはプログラムの実行後に表示できる任意の文字列を印刷できます。

SO for Smartinspectの広告に気づきました。これは、これをより高いレベルに引き上げ、各ログのスタックトレース、時間の経過とともに変化するグラフやデータ値のプロットなどのより優れたオプション、および出力テキスト文字列の単純なリスト。

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

少しグーグルすると、大量のロギングフレームワークが見つかりますが、テキストダンプ以外のことは何もしていないようです。彼らのより優れたツール(Smartinspectに似ていますか?)は、より多くのことを実行しますか?商用またはオープンソースは問題なく、マルチプラットフォームは大きなプラスです。

4

3 に答える 3

4

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

私は Java でプログラミングしていませんが、Python と同じ方法でスタック トレースを提供できると思います。スタックはおそらく、検査および操作できるランタイム内の単なる別のオブジェクトです。

一方、C++ にはこれらの優れた点はありません。基本的に C にオブジェクト指向を追加する金属に近い言語であることを意図しています (C++ の利点が終わったことについて、他の人がもっと精巧な説明を思い付くと確信しています)。 C ですが、それは別の議論です)。

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

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

他に検討できることは、syslogd との統合です。この場合も、より豊富な分析ツールが存在する可能性があります (これにより、SmartInspect で宣伝されている機能に沿った機能が提供されます。つまり、TCP/IP ベースのログ記録です)。

注: ここで C++ について述べたことの多くは、C++ で適切なフレームワークを見つけて微調整した内省的な型 (適切なモック オブジェクトなど) を実行しようとした以前の経験から来ています。

于 2009-04-06T12:57:19.090 に答える
2

数年前、DDJ で Windows および Unix/Linux を使用した C/C++ でのスタックのダンプに関する記事を書きました。多分それはあなたを助ける:

http://www.ddj.com/architect/185300443を参照

于 2009-04-06T15:23:30.907 に答える
0

特定のプラットフォームに制限できる場合は、ログにスタック トレースを手動で追加できます。たとえば、glibc 機能を使用して Linux でスタック トレースを取得し、スタック トレースを例外クラスにアタッチします。Windows でも同様の機能を利用できますが、前述のように、これらのインフラストラクチャは移植できません。

于 2009-04-06T15:22:00.100 に答える