1

Hey Guys次のように、現在の関数/サブ(ロギング用)のすべての引数を一般的に反復できる必要があります。

Public sub SampleHandler(ByVal Sender as Object, ByVal e as EventArgs)
    Dim argholder as List(of Object)
    For each arg in getcurrentargs() '<-------- That thing
        argholder.add(arg)
    Next
    Log(argholder)
    'Continue doing method things
End Sub

何かご意見は?私はEmit(完全には把握していません)とStackTraceを介してそれらを抽出しようとしていますが、これまでのところ役に立ちません。私は複数の情報源からMSILがこれを達成できると言われましたが、私が話をした人は誰も私に実用的な実装や方法の明確な説明を与えることができません。

追加情報:

関数へのすべての引数を繰り返し処理し、それらの値をリストに追加できる必要があります。これが名前を抽出して値を取得するために利用できるメソッドによるものであろうと、それらを参照できるある種の汎用識別子によるものであろうと、どちらの方法でも問題ありませんが、プログラムによる静的コードブロックである必要があります。

その意図は、機密性の低い関数(このプロジェクトで使用しているコードに数百が含まれている)で、このコードブロックへのインライン参照をドロップできるようにすることです(そのためのメソッドを考え出しました)。 )関数の名前(done)をキャプチャするには、モジュール/クラス(done)、実行時(done)、結果(関数の場合、done)、現在のerr_level(done)、および値をキャプチャします。パラメータとして渡され(モジュール/クラスと関数名がわかっているロジックでは、必要に応じて値を一致させることができます)、向きを変えてログに記録できるようにします。「センシティブ」関数は、別の方法で処理する必要があるため、p/wやu/nなどをログアウトしません。しかし、それらは世話をされています。

4

2 に答える 2

1

1つの可能性は、paramarrayを使用するようにLog()ルーチンを変更することです。

Sub Log(ParamArray o() As Object)
  For i As Integer = 0 To o.GetUpperBound(0)
    '...do stuff....
  Next
End Sub

次に、呼び出すときにすべてのパラメータを追加します...

Public sub SampleHandler(ByVal Sender as Object, ByVal e as EventArgs)
    Call Log(Sender, e)
    'Continue doing method things
End Sub
于 2012-07-16T02:41:46.107 に答える
0

System.Reflection.MethodBase.GetCurrentMethodを試してから、返されたメソッドのGetParameters関数を使用できます。

そうは言っても、これが実際に機能するかどうかについては混乱や意見の相違がありますが、可能性としてそれを排除する以外の理由がなければ、おそらく試してみる価値があります。

于 2012-07-16T01:43:52.013 に答える