.NETのコールスタック内の各フレームのパラメータ値を取得することは可能ですか?

StackOverflow https://stackoverflow.com/questions/819576

  •  03-07-2019
  •  | 
  •  

質問

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

APIをプロファイリングすることで可能になることはわかっています。しかし、マネージコードのみで可能だろうか?

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

役に立ちましたか?

解決

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

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

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

他のヒント

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top