12

私はマネージド.NETコードについて話している。プログラムを実行してそれにVSをアタッチすると、呼び出しスタック内の各メソッドのパラメーターの値を確認できます。呼び出しスタック内の各メソッドのすべてのパラメーターの値をログに記録するログソリューションを作成したいと思います。実際、例外が発生した場合に備えて、この情報が必要です。

私はそれがプロファイリングAPIで可能であることを知っています。しかし、マネージコードだけでそれは可能だろうか?

更新:わかりました、おそらく純粋な.NETでは不可能です。次に、ある種のアンマネージコードを使用する場合があります...ポイントは、アプリケーション自体の内部からこれを実行することです。例外が発生した場合のアプリケーションは、呼び出しスタック内のメソッドの値に関する情報を返すライブラリ(管理されていない可能性があります)を呼び出す可能性があります。ただの考え...

4

2 に答える 2

7

パラメータ値はStackFrameインスタンスに保存されません。実際、明示的に行うことを選択しない限り、それらはまったく記録/記録されません。

これらの値をログに記録する1つの明白な方法は、AOPを使用することです。それは確かにコストを意味しますが、ロギングフレームワークと適切なログレベルと組み合わせて、それは代替手段になるかもしれません。また、例外がスローされる可能性が高い、ベースコード内の一部のタイプ/メソッドのみをインストルメント化することを選択することもできます。ログ呼び出しを発行するために、静的なウィービング機能としてPostsharpを選択するでしょう。

とにかく、それは理想的な解決策にはほど遠いですが、管理された世界で立ち往生している場合、多くの選択肢がないのではないかと思います。

于 2009-05-04T10:40:52.667 に答える
2

おそらく最善のオプションは、関連するメソッドに必要なトレースコードを挿入することです。これにより、必要に応じてトレースリスナーをアタッチし、値をダンプできます。

それはあなたが求めているものではないことを私は知っていますが、それはデータを取得するための1つの方法です。

または、WinDbgを使用してアプリケーションをデバッグすることもできます。!clstack /!dsoコマンドを使用すると、パラメーターを検査してオブジェクトをスタックできます。

于 2009-05-04T10:40:21.467 に答える