2011-12-20 184 views
21

這實際上是此問題的另一部分。公共語言運行時無法設置斷點

Error settings breakpoints but only on some lines while debugging

我遠程調試CRM 2011插件在VS 2010

I'n我的源文件,我可以將所有整個代碼斷點一個除了少數地方。

當我嘗試設置斷點時,出現此錯誤 「無法設置以下斷點:」和「公共語言運行系統無法設置斷點」。

protected override void ExecutePlugin() 
{ 
    SetStateResponse response = new SetStateResponse(); // Breakpoint works 

    // Message switch 
    switch (_crmMessage) // Breakpoint error 
    { 
     case CrmPluginMessageEnum.Create: 

     Entity pimage = null; // Breakpoint error 
     if (_context.PostEntityImages.ContainsKey("postcreate")) // Breakpoint works 
      pimage = _context.PostEntityImages["postcreate"]; // Breakpoint error 

     break; // Breakpoint error 
     } 
} // Breakpoint error 

UPDATE 此外,在模塊窗口它顯示爲優化該dll:沒有用戶代碼:是的符號狀態:符號加載

+1

請添加您的代碼!有很多情況(比如lambda表達式,例如沒有初始化的變量聲明),您無法正常設置斷點。 – 2011-12-20 19:15:40

+0

http://blogs.msdn.com/b/habibh/archive/2009/09/01/troubleshooting-common-breakpoint-problems-in-the-visual-studio-debugger-part-i.aspx – 2011-12-20 19:18:03

+0

@DJKRAZE F9做同樣的事情。檢查問題中的鏈接以查看示例代碼。 – user1231231412 2011-12-20 19:18:04

回答

0

而且你對DLL更新被優化你的線已經指出斷點不起作用的地方可能會被優化掉,因爲你的整個switch語句沒有做任何事情,而是決定是否給一個從未使用過的變量賦值並且不超出switch語句的範圍。因此,編譯器根本不會爲switch語句生成任何代碼,因爲它根本沒有做任何事情,或者出於同樣的原因,jit在運行時就會被刪除。

+0

正確。通過反射器顯示它已轉換爲if語句。 – user1231231412 2011-12-20 22:22:46

3

當我在Visual Studio的兩個實例中打開項目時,我遇到了同樣的問題。我沒有調試的項目鎖定了文件,並通知我「這個文件已經在源代碼編輯器之外修改過了。」在接受我的非調試解決方案中的更改後,我不再收到錯誤,並且我的解決方案在我正在調試的解決方案中遇到。

聽起來好像這個錯誤有很多可能的原因,但是這對我來說確實如此。

0

我剛剛也有類似的經歷,而且我的工作方式是在調用例行程序的地方放一個斷點,然後單步進入例行程序,直到我看到它到底在做什麼。在我的情況中,有一個返回阻止了例程中的所有代碼運行,所以優化器將其全部拋出。有時候這是愚蠢的事情,對嗎?無論如何,如果您從調用堆棧中較高的級別開始,並進入問題所在的例程,問題的原因可能會變得更加明顯。

0

這個問題的另一個原因我剛剛發現,如果你正在針對CRM進行調試,則不會更新插件註冊點。即使您將新DLL複製到目標計算機並遠程連接到不是DLL CRM將使用的進程。 CRM將嘗試從其數據庫中獲取舊版本的副本,直到您重新運行插件註冊。

一個錯誤浪費了我一天半的時間!

26

兩種可能性,已經由其他答案一種參考:

  1. 確保您使用的組件,而不是 發佈版本的調試版本,因爲發佈版本將刪除或優化 您碼。
  2. 確保每次在您的Visual Studio中(在項目屬性選項卡上)部署程序集時,您都在更新版本。 當您增加版本時,CRM將確保卸載舊的 程序集版本並重新加載新的版本,而不會重置IIS。
0

我在開始運行調試項目時遇到了這個錯誤,我通過Clean All Project和Rebuild All Project來解決它,重建錯誤後消失。

相關問題