0

これは私の他の質問に関連していますが、今回は非常に具体的です。AOP(特にPostSharp)を使用して、関数の戻り値が使用されたかどうかを検出することは可能ですか?例えば

var x = y.func();  // used
y.func(); // not used

検出は、一般的な関数ではなく、この特定の呼び出しに対して実行する必要があることに注意してください。

私はAOP/PostSharpを使用したことがないので、PostSharpのドキュメントに答えが見つからなくても、そこにないかどうかはわかりません。ただし、PostSharpを主張することはありません。仕事ができる限り、どんなライブラリでも構いません。

4

2 に答える 2

1

そのためにAOPを使用することはできませんが、(ツールを知っている場合は)その仕事を行うMSIL分析を作成するのは非常に簡単です。

基本的に、メソッドの戻り値が使用されない場合、「call」または「callvirt」の直後に「pop」命令があります。PostSharpを実行してジョブを実行できます(低レベルのウィーバーを使用し、必要なメソッドの呼び出しをインターセプトするIAdviceを定義し、InstructionSequenceブックマークを定義し、もう1つの命令を読み取り、それが「pop」であるかどうかをテストし、ブックマークにロールバックします。スキャンを安全に続行できるようにします。

しかし、なぜあなたはそれを必要とするのだろうかと私はニコールの答えに同意します。

于 2009-11-05T13:19:20.810 に答える
0

それは可能性が非常に高いですが、それは仕事にとって非常に間違ったツールであるため、ソリューションを実装するために必要以上の作業を行うことになります。他の質問に戻って、ドライバーで釘を沈める方法に焦点を合わせるのではなく、より良い候補のアプローチを見つけることに焦点を当てることをお勧めします...

于 2009-11-05T13:12:01.417 に答える