PostSharp和调试问题?

时间:2009-09-08 05:24:59

标签: c# .net visual-studio debugging postsharp

我做了一个非常简单的方面,并在调试时发现了一个问题(参见代码)。我在方法出口上设置了一个断点,它实际上在“入口”方法中命中。 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 个答案:

答案 0 :(得分:3)

通常,当调试符号过期或与正在运行的可执行文件不匹配时,会发生这种情况。

我使用PostSharp并且之前没有见过这样的东西......你试过重建吗?或者删除输出文件夹然后构建?

编辑:

所以我跑了你的样本。如果将MyAspect实现移动到另一个文件,当您开始调试代码时,断点将变为不可用,并显示以下消息:“断点当前不会被命中。没有可执行文件与此行关联...”< / p>

如果没有应用方面,则不会发生。所以是的,看起来像后期编译步骤中的某些内容确实会导致问题。

我会在这里留下这个答案,作为对问题的澄清。如果您认为它没用,我也可以删除它......

编辑2: 至于解决方法:将断点设置为上一行(而不是右括号),然后跳过方法中的最后一行代码......

答案 1 :(得分:0)

这可能是PostSharp的错误。您可以将其报告给http://www.postsharp.org/tracker

答案 2 :(得分:0)

在搜索此问题的解决方案时,我偶然发现了这个问题。我有同样的问题,并发现了一些关于它的事情。

它看起来(我真的不知道)它与构建过程中发生的顺序有关。我的想法是关于构建/重建时发生的事情(在我的情况下清理无关紧要):

  • 构建程序集
  • 为他们创建.pdb
  • 再次构建,应用postharp代码
  • .pdb不会再次创建(我猜!!)

这意味着:.pdb与正在调试的代码不匹配。为什么我这么想?好吧,如果我在程序集上禁用了postharp,一切正常。当它启用时,简单的代码就像     “string str =”test“; 正如Nader Shirazie提到的“与可执行代码无关”。我不能同意。

我仍在寻找“真正的”解决方案。我当前的解决方法,禁用程序集的postharp,并不是真的令人满意,因为我也想调试方面。 也许它只是一个简单的设置。我无法想象像postharp这样的工具,它可以提高生产力和质量,使调试失败......任何人?

我可能是错的,但在我的情况下,这就是它的样子......

欢呼声, 延

答案 3 :(得分:0)

这似乎是因为PostSharp在编译项目时将代码“注入”到您的方法中,因此断点行和所有异常行号都被“X”行数量所取消。您可以查看反编译的.dll,并查看PostSharp注入代码库的所有代码,导致.pdb文件与.dll不同步