1

多くのユーザーをサポートするグローバルな取引システムに取り組んでいます。各ユーザーは、取引を予約、修正、編集、削除できます。このシステムは、中央のディール キャプチャ サービスによって規制されています。ディール キャプチャ サービスは、発生した更新をすべてのユーザーに通知します。

問題は、クラッシュが発生したときに発生します。本番環境をテスト システムで再作成することは不可能であるため、クラッシュ ダンプとログ ファイルに頼らなければなりません。

ただし、これはユーザーが何をしてきたかを教えてくれません。

(クラッシュ時に) ユーザーが何をしてきたかの履歴をダンプするシステムが欲しいです。私が追加したものはすべてライブ環境に入れる必要があるため、パフォーマンスに大きな影響を与えることはできません。

賢明なアイデアとして、スタック トレースのように機能する各関数の上部にあるマクロを考えていました (トレード ID、ユーザー ダイアログの選択などの追加のユーザー情報を提供できるのは私だけでした..) システムはスタック トレースを記録します (スレッドごとに) 履歴を循環バッファーに保持します (サイズは、キャプチャする履歴の量によって異なります)。その後、クラッシュ時に、この履歴スタックをダンプできました。

誰かがより良い解決策を持っているかどうか、または誰かが既存のフレームワークを知っているかどうかを本当に知りたいですか?

ありがとうリッチ

4

3 に答える 3

1

おそらく、デバッガーで監査証跡を表示することに頼るのではなく、 atexit() ハンドラーで出力されるようにトリガーできますが、あなたのソリューションはかなり合理的に聞こえます。__FILE__,__LINE__,pthread_self() を含む文字列のスタックのような単純なもので十分かもしれません

監査証跡に似ているため、既存の元に戻すフレームワークを使用することもできますが、必要以上に重いものになります。これはコマンド パターンに基づいている可能性が高く、execute() メソッドを実装することが期待されますが、空白のままにしておくこともできると思います。

于 2010-04-26T19:28:41.593 に答える
0

詳細情報を含む別の (循環) ログ ファイルを作成することをお勧めします。このファイルは、他のファイルに比べて指数関数的に大きくなることに注意してください。

もう 1 つの方法は、最後のNトランザクションを保存することです。トランザクション ログを読み取り、データを仮想アプリケーションにフィードするプログラムを作成します。これは、原因を作成するのに役立つ場合があります。以前に組み込みシステムでこの手法を使用したことがあります。

于 2010-04-26T19:39:48.817 に答える
0

トレーディング システムは、通常、そのレベルのインストルメンテーションのパフォーマンス ヒットに悩まされることはありません。特に、C++ ベースのシステムは、パフォーマンスのためにデバッグの容易さを犠牲にする傾向があります。そうでなければ、より多くの企業がそのようなシステムを Java/C# で開発していたでしょう。

C++ にスタック トレースを導入する試みは避けたいと思います。また、プログラムの動作になんらかの影響を与えない (たとえば、スレッドの動作に影響を与える) 方法でそのようなシステムを導入できるかどうかも確信が持てません。

私見ですが、プログラム内で物事を内部的にキャプチャしようとするよりも、外部入力 (ユーザー GUI アクションやメッセージ トラフィックなど) をログに記録する方が望ましい場合があります。その場合、失敗を再現してデバッグする可能性が高くなります。

現在、クライアントとの間のすべてのネットワーク トラフィックをログに記録していますか? 多くの FIX ベースのシステムは、規制目的でこれを記録します。I/O を簡単にログに記録できますか?

于 2010-04-26T18:38:30.597 に答える