2009-09-08 77 views
4

我做了一個非常簡單的方面,並在調試時發現問題(請參閱代碼)。我在方法出口設置了一個斷點,實際上它在「入口」方法內。 PostSharp 1.5,Visual Studio 2008 SP1
這是一個已知的錯誤,是否有任何解決方法?PostSharp和調試問題?

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"); 
    } 
} 

回答

3

當調試符號過期或與正在運行的可執行文件不匹配時,通常會發生這種情況。

我使用PostSharp,並沒有見過這樣的事情......你有沒有嘗試重建?或刪除您的輸出文件夾,然後建設?

編輯:

所以我跑你的樣品。如果您將MyAspect實現移到另一個文件,則當您開始調試代碼時,斷點將變爲不可用,並顯示以下消息:「斷點當前不會被命中。沒有可執行文件與該行關聯...」

沒有應用的方面,它不會發生。所以,是的,看起來像在後編譯步驟確實會導致問題。

我會在這裏留下這個答案作爲澄清問題。如果您認爲它沒有用,我也可以刪除它...

編輯2: 解決方法:將斷點設置爲上一行(不是右大括號),然後跨越最後一行代碼中的方法...

+0

重建/清理不會更改任何內容。 您是否嘗試過執行我的示例? – skevar7 2009-09-08 05:39:35

+0

這似乎是一個.pdb問題。 PostSharp僅修改程序集,而不修改調試符號文件。 – boj 2010-09-27 14:33:43

0

在尋找這個問題的解決方案時,我偶然發現了這個線程。我遇到了同樣的問題,並發現了一些相關的問題。

它SEEMS(我真的不知道它),它與訂單事件發生在構建過程中有關。我的想法是,當構建/重建會發生什麼情況如下(清理並不在我的情況無關緊要):

  • 構建組件
  • 創建的.pdb再爲他們
  • 構建,應用postsharp代碼
  • .pdb的不是再次創建(我猜!!)

這將意味着:.pdb與正在調試的代碼不匹配。我爲什麼這麼想?好吧,如果我禁用組件上的postsharp,一切工作正常。當它被啓用,簡單的代碼等 「字符串str =‘測試’; 是,如納德Shirazie提到的‘不與可執行代碼相關聯。’我不能同意

我仍然尋找一個‘真實’的解決方案我當前的解決方法,禁用程序集的postsharp,是不是真的令人滿意,因爲我想調試的方面,當然,也是如此。和質量,使調試失敗...任何人?

我可以是錯的,但這就是它在我的情況下是這樣的...

歡呼聲, 延

0

這似乎是因爲PostSharp「內噴射」代碼到你的方法,當你編譯項目,所以破發點線和所有異常的行號都是關閉的線路的「X」量。您可以查看已反編譯的.dll文件,並查看PostSharp注入代碼庫的所有代碼,這些代碼會導致.pdb文件與.dll不同步

+0

通常,PostSharp還會修改.pdb文件以匹配新的.dll。不同步的問題可能是由於錯誤或某些不兼容(例如.pdb格式的更改)引起的。 – AlexD 2015-01-23 20:03:46