2011-12-20 13 views
21

To jest faktycznie inna część tego pytania.Środowisko wykonawcze dla wspólnego języka nie było w stanie ustawić punktu przerwania.

Error settings breakpoints but only on some lines while debugging

Mam zdalnego debugowania wtyczki CRM 2011 w VS 2010.

I'n jednym z moich plików źródłowych można ustawić punkt przerwania wszystkich przez cały kod z wyjątkiem kilku miejscach.

Podczas próby ustawienia punktu przerwania pojawia się ten błąd "Nie można ustawić następującego punktu przerwania:" i "Środowisko wykonawcze wspólnego języka nie może ustawić punktu przerwania."

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 Również w oknie modułów pokazuje dll jako Zoptymalizowana: brak kodu użytkownika: Tak Symbol Status: Symbole Loaded

+1

Dodaj swój kod! Istnieje wiele przypadków (na przykład wyrażeń lambda, deklaracja zmiennych bez inicjalizacji), w których normalnie nie można ustawić punktu przerwania. –

+0

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

+0

@DJKRAZE F9 robi to samo. Sprawdź link w pytaniu, aby zobaczyć przykładowy kod. – user1231231412

Odpowiedz

0

Dalsze do aktualizacji o DLL są zoptymalizowane linie, które wskazano, gdzie punkty przerwania nie działają prawdopodobnie zostanie zoptymalizowane, ponieważ cała instrukcja switch nie robi nic innego, decydując, czy przypisać wartość zmiennej, która nigdy nie jest używana i nie żyje poza zakresem instrukcji switch. W związku z tym kompilator po prostu nie wygeneruje żadnego kodu dla instrukcji switch, ponieważ nic nie robi lub jit po prostu usuwa go w czasie wykonywania z tego samego powodu.

+0

Prawidłowo. Przez reflektor pokazuje, że został przekonwertowany na instrukcję if. – user1231231412

3

Miałem ten sam problem, gdy miałem projekt otwarty w dwóch instancjach Visual Studio. Projekt, którego nie debugowałem, miał blokadę pliku i powiadomił mnie: "Ten plik został zmodyfikowany poza edytorem źródła." Po zaakceptowaniu zmian w moim rozwiązaniu bez debugowania, nie otrzymałem już błędu, a moje punkty przerwania zostały trafione w moim rozwiązaniu, które debugowałem.

Wygląda na to, że istnieje wiele możliwych przyczyn tego błędu, ale zrobiłem to za mnie.

0

Po prostu miałem podobne doświadczenie i sposób, w jaki przez to przeszedłem, polegał na umieszczeniu punktu przerwania w miejscu, w którym wywołano procedurę, a następnie przechodzeniu do rutynowych czynności, dopóki nie zobaczyłem dokładnie, co myśli, że robi. W moim przypadku wystąpił zwrot, który uniemożliwiał działanie całego kodu w procedurze, więc optymalizator rzucił to wszystko. Czasami to głupie rzeczy, prawda? W każdym razie, jeśli zaczniesz od poziomu wyższego w stosie wywołań i przejdziesz do rutyny, w której występuje problem, przyczyna problemu może stać się bardziej oczywista.

0

Inną przyczyną tego problemu, który właśnie znalazłem, jeśli debugujesz przeciwko CRM, nie aktualizujesz punktów rejestracji wtyczki. Nawet jeśli skopiujesz nowe biblioteki DLL na maszynę docelową i dołączasz zdalnie do tego procesu, którego nie używa CRM DLL. CRM spróbuje pobrać kopię starej wersji ze swojej bazy danych, dopóki ponownie nie zarejestruje wtyczki.

Błąd, który zmarnował dla mnie półtora dnia!

26

dwie możliwości, już niby przywoływane przez innych odpowiedzi:

  1. upewnij się, że korzystasz z kompilacji Debug zespołu zamiast kompilacji Release, ponieważ kompilacja Release usunie lub zoptymalizować swoje kod.
  2. Upewnij się, że aktualizujesz wersję za każdym razem, gdy wdrażasz złożenia w Visual Studio (na zakładce właściwości projektu). Po zwiększeniu wersji CRM z pewnością wyładuje starą wersję zespołu i ponownie załaduje nową bez resetowania usług IIS.
0

Ten błąd wystąpił podczas uruchamiania debugowania projektu, a ja rozwiązałem go przez Clean All Project i Rebuild All Project, po odbudowaniu błąd zniknął.