4

非常に単純なアスペクトを作成しましたが、デバッグ中に問題が見つかりました (コードを参照)。メソッドの exit にブレークポイントを設定すると、実際には「entry」メソッド内にヒットします。PostSharp 1.5、Visual Studio 2008 SP1
これは既知のバグですか?回避策はありますか?

class Program
{
    [MyAspect]
    static void Main(string[] args)
    {
        Console.WriteLine("body");
    } // setting breakpoint here
}

[Serializable]
class MyAspect : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    { // hits here actually! (debug mode)
        Console.WriteLine("entry"); // hits here actually! (release mode)
    }

    public override void OnExit(MethodExecutionEventArgs eventArgs)
    {
        Console.WriteLine("exit");
    }
}
4

4 に答える 4

3

通常、これはデバッグ シンボルが古いか、実行中の実行可能ファイルと一致しない場合に発生します。

私は PostSharp を使用していますが、これまでにこのようなものを見たことがありません... 再構築を試みましたか? または、出力フォルダーを削除してからビルドしますか?

編集:

だから私はあなたのサンプルを実行しました。実装を別のファイルに移動するMyAspectと、コードのデバッグを開始すると、ブレークポイントが使用できなくなり、次のメッセージが表示されます。

アスペクトが適用されなければ、それは起こりません。はい、コンパイル後のステップで何かが問題を引き起こしているようです。

質問の明確化として、この回答をここに残します。役に立たないと思われる場合は、削除することもできます...

編集 2: 回避策として: ブレークポイントを前の行 (右中括弧ではなく) に設定し、メソッドのコードの最後の行にステップ オーバーします...

于 2009-09-08T05:33:04.687 に答える
0

これは、PostSharp のバグである可能性があります。http://www.postsharp.org/trackerに報告できます。

于 2009-09-08T06:11:26.420 に答える
0

この問題の解決策を探しているときに、このスレッドに出くわしました。私は同じ問題を抱えていて、それについて何かを見つけました。

ビルドプロセスで発生する順序に関係しているようです(私は本当に知りません)。私の考えは、ビルド/再ビルド時に何が起こるかということです(私の場合、クリーンアップは重要ではありません):

  • ビルド アセンブリ
  • それらのために.pdbを作成します
  • 再度ビルドし、postsharp コードを適用します
  • .pdb は再度作成されません (推測します!!)

つまり、.pdb がデバッグ中のコードと一致しません。なぜ私はこのように考えるのですか?アセンブリでポストシャープを無効にすると、すべて正常に動作します。有効にすると、"string str = "test"; のような単純なコードは、Nader Shirazie が「実行可能コードに関連付けられていない」と述べたように、同意できません。

私はまだ「本当の」解決策を探しています。もちろん、アスペクトもデバッグしたいので、アセンブリのポストシャープを無効にする私の現在の回避策は、本当に満足のいくものではありません。多分それは単純な設定です。生産性と品質を向上させ、デバッグを失敗させるポストシャープのようなツールを想像することはできません...誰か?

私は間違っている可能性がありますが、それは私の場合のように見えます。

于 2013-02-14T06:37:06.260 に答える