C# 后处理和调试问题?
我制作了一个非常简单的方面,并在调试时发现了一个问题(请参阅代码)。我在方法出口上设置了一个断点,它实际上击中了“entry”方法内部。PostSharp 1.5,Visual Studio 2008 SP1C# 后处理和调试问题?,c#,.net,visual-studio,debugging,postsharp,C#,.net,Visual Studio,Debugging,Postsharp,我制作了一个非常简单的方面,并在调试时发现了一个问题(请参阅代码)。我在方法出口上设置了一个断点,它实际上击中了“entry”方法内部。PostSharp 1.5,Visual Studio 2008 SP1 这是一个已知的错误,有什么解决方法吗 class Program { [MyAspect] static void Main(string[] args) { Console.WriteLine("body"); } // setting b
这是一个已知的错误,有什么解决方法吗
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");
}
}
当调试符号过期或与正在运行的可执行文件不匹配时,通常会发生这种情况 我使用PostSharp,以前从未见过这样的东西。。。你试过重建吗?或者删除输出文件夹,然后生成 编辑: 所以我查了你的样本。如果将
MyAspect
实现移动到另一个文件中,则在开始调试代码时,断点将不可用,并显示以下消息:“当前不会命中断点。没有与此行关联的可执行文件…”
如果没有应用方面,它就不会发生。所以,是的,看起来编译后步骤中的某些内容确实导致了问题
我将把这个答案留在这里,作为对问题的澄清。如果你认为它没有用,我也可以删除它
编辑2:
至于解决方法:将断点设置为前一行(不在右括号上),然后跨过方法中的最后一行代码…这可能是PostSharp的错误。您可以向报告。在搜索此问题的解决方案时,我偶然发现了此线程。我也有同样的问题,并且发现了一些问题 这似乎(我真的不知道)与构建过程中发生的事情的顺序有关。我的想法如下所示:构建/重建时会发生什么(在我的情况下,清理并不重要):
- 生成程序集
- 为他们创建.pdb
- 再次构建,应用postsharp代码
- .pdb不会再次创建(我猜!!)
我可能错了,但我的情况就是这样。这似乎是因为PostSharp的“注射”“编译项目时,将代码写入方法中,这样断点行和所有异常行号都会减少‘X’行数。您可以查看反编译的.dll,并查看PostSharp注入到您的代码库中的所有代码,这些代码导致.pdb文件与.dll不同步重建/清理不会改变任何内容。您是否尝试过执行我的示例?这似乎是一个.pdb问题。PostSharp仅修改程序集,而不修改调试符号文件。通常,PostSharp还修改.pdb文件以匹配新的.dll。不同步问题可能是由错误或某些不兼容(例如.pdb格式的更改)引起的。