2

メソッド Assert() を書きました:

[System.Diagnostics.Conditional("DEBUG")]
internal static void Assert(bool condition)
{
    if (!condition)
    {
        var message =
                "Line:" + (new System.Diagnostics.StackFrame(1)).GetFileLineNumber() + "\r\n" +
                "Column:" + (new System.Diagnostics.StackFrame(1)).GetFileColumnNumber() + "\r\n" +
                "Where:" + (new System.Diagnostics.StackFrame(1)).GetMethod().Name;
            Log("ASSERTION", message);
        }
    }

トリガーされたときに行と列の両方が 0 になるのはなぜですか? Debug.Assert(false) が呼び出される場所であるはずです。

よろしく、

4

1 に答える 1

8

オーバーロードを使用して、2 番目の引数としてStackFrame(int, bool)指定する必要があります。trueオーバーロードだけではStackFrame(int)ソース情報が取得されないようです。

サンプルコード:

using System.Diagnostics;

...

[Conditional("DEBUG")]
internal static void Assert(bool condition)
{
    if (!condition)
    {
        StackFrame frame = new StackFrame(1, true);
        var message = string.Format("Line: {0}\r\nColumn: {1}\r\nWhere:{2}",
                                    frame.GetFileLineNumber(),
                                    frame.GetFileColumnNumber(),
                                    frame.GetMethod().Name);
        Log("ASSERTION", message);
    }
}

(ちなみにあなたのコメントを見ると、PDBファイル必要になります。そこにデバッグ情報が保存されています。正直に言うと、これがSQLCLRトリガーで機能するかどうかはまったくわかりません。上記は私にとってはうまくいきますコンソールアプリですが、私が言えるのはそれだけです...)

于 2011-09-11T21:33:41.467 に答える