Edytuj i kontynuuj: „Zmiany nie są dozwolone, gdy…”

108

Nawet jeśli utworzę czysty projekt WinForms, Edytuj i Kontynuuj nie działa i wyświetla mi błąd:

Zmiany nie są dozwolone, gdy debugger został dołączony do już działającego procesu lub debugowany kod został zoptymalizowany podczas kompilacji lub wykonywania.

  1. Opcja Edytuj i kontynuuj jest zaznaczona w menu Narzędzia → Opcje → Debugowanie.
  2. Optymalizacja nie jest włączona.
  3. Wygląda na to, że nie ma skonfigurowanego żadnego zarządzanego profilera.
  4. Pracuję w trybie debugowania
  5. Używam procesora x64 i 32-bitowego systemu Windows XP, ale ustawienie platformy docelowej na x86 zamiast AnyCpu nie pomaga.
  6. Naprawianie instalacji programu Visual Studio nie pomaga.

Znalazłem również ten artykuł na stronie MSDN:

Nieobsługiwane scenariusze

Edycja i kontynuacja nie jest dostępna w następujących scenariuszach debugowania:

  • Debugowanie w systemie Windows 98.

  • Debugowanie w trybie mieszanym (natywne / zarządzane).

  • Debugowanie SQL.

  • Debugowanie zrzutu Dr. Watsona.

  • Edycja kodu po nieobsługiwanym wyjątku, gdy opcja „Rozwiń stos wywołań dla nieobsłużonych wyjątków” nie jest zaznaczona.

  • Debugowanie wbudowanej aplikacji wykonawczej.

  • Debugowanie aplikacji przy użyciu opcji Dołącz do zamiast uruchamiania aplikacji za pomocą polecenia Start z menu Debuguj.

  • Debugowanie zoptymalizowanego kodu.

  • Debugowanie kodu zarządzanego, gdy celem jest aplikacja 64-bitowa. Jeśli chcesz użyć opcji Edytuj i Kontynuuj, musisz ustawić cel na x86. (Właściwości projektu, karta Kompiluj, Zaawansowane ustawienia kompilatora).

  • Debugowanie starej wersji kodu po niepowodzeniu kompilacji nowej wersji z powodu błędów kompilacji.

Ale mogę odpowiedzieć „Nie” na każdą pozycję na tej liście.

Wcześniej działało, ale kilka dni temu przestało działać i nie wiem, co może być tego przyczyną.

nightcoder
źródło
2
Czy pracujesz w trybie wydania? Czy pracujesz na X64?
Sam Saffron
Czy metoda, którą próbujesz wypróbować, jest naprawdę krótka? być może zostało to wbudowane (chociaż myślę, że wstawianie nie występuje podczas debugowania)
Sam Saffron,
Nie działa na żadnych metodach, ani bardzo krótkich, ani bardzo długich.
nightcoder
Czy próbowałeś już naprawić instalację?
Richard Anthony Hein
3
Chyba powinienem dodać, że E&C to dość złożona funkcja. Matryca testowa debuggera jest ogromna, a uruchomienie E&C w każdej kombinacji byłoby niezwykle trudne. Ale jest to również bardzo ważna funkcja, więc przyjęliśmy wiele ograniczeń, aby upewnić się, że zostanie dostarczona. W ramach celowych ograniczeń, które na niego nałożiliśmy, jest to jedna z dostarczonych przez nas funkcji najwyższej jakości.
Jay Bazuzi

Odpowiedzi:

21

W końcu udało mi się rozwiązać problem: ODINSTALUJ Gallio

Wydaje się, że Gallio ma sporo nierównych krawędzi i lepiej nie używać MbUnit 3.0, ale używać frameworka MbUnit 2.0, ale używać programu Gallio Runner, którego używasz bez instalowania z instalatora (który również zainstalował wtyczkę Visual Studio).

Nawiasem mówiąc, miałem problem nawet po „wyłączeniu” wtyczki Gallio. Tylko odinstalowanie rozwiązało problem.

PS. Edytowane przez nightcoder:
W moim przypadku wyłączenie TypeMock Isolator (mocking framework) w końcu pomogło ! Edytuj i kontynuuj teraz działa !!!

Oto odpowiedź od wsparcia TypeMock:

Po dokładniejszym zapoznaniu się z edycją i kontynuowaniem problemu oraz rozmowie na jego temat z firmą Microsoft doszliśmy do wniosku, że nie można go rozwiązać w przypadku Isolatora. Isolator implementuje profiler CLR i zgodnie z naszymi badaniami, po włączeniu i dołączeniu profilera CLR, edycja i kontynuacja jest automatycznie wyłączana. Przykro mi, że nie jest to już uważane za błąd, ale raczej ograniczenie izolatora.

nightcoder
źródło
69

Inne odpowiednie rozwiązania

Poniżej znajduje się niekompletna, nieuporządkowana lista możliwych rozwiązań do wypróbowania, jeśli * próbujesz szybko naprawić i kontynuować.

  • Upewnij się, że jesteś w trybie debugowania
  • Upewnij się, że nie uruchamiasz procesu w trybie mieszanym
  • Spróbuj ustawić docelowy procesor na x86 zamiast AnyCPU (na maszynach x64)
  • Usuń zaznaczenie pola wyboru Optymalizuj kod dla trybu debugowania we właściwościach projektu-> Debuguj
  • Usuń zaznaczenie opcji Włącz optymalizacje w zaawansowanych ustawieniach kompilatora
  • (ASP.NET) Sprawdź odpowiedź nightcodera, jeśli tak jest
  • (ASP.NET) Sprawdź tę odpowiedź (przez matrixugly), jeśli tak jest
  • (ASP.NET) Upewnij się, że masz włączoną opcję Edytuj i kontynuuj na karcie Sieć Web (vs2010)
  • (ASP.NET) Przejdź do Właściwości> Sieć> Serwery i upewnij się, że opcja Włącz i kontynuuj jest zaznaczona w obszarze Użyj programu Visual Studio Development Server .
  • (ASP.NET WebAPI) Upewnij się, że zatrzymałeś metodę kontrolera przy użyciu punktu przerwania, zanim spróbujesz go edytować.
  • (vs2017) Idź do Narzędzia> Opcje> Debugowanie i odznacz (usuń zaznaczenie) „Edytuj i kontynuuj”. W rzeczywistości jest to przeciwieństwo „konwencjonalnych” porad (zobacz inne punkty w tym poście). To nie pozwala na faktyczne dokonywanie zmian w uruchomionym programie (tj. Nie zmienia na gorąco zmian w kodzie, które robisz) - po prostu pozwala na edycję kodu (tj. Zapobiega tej irytującej wiadomości i "blokowaniu" twojego edytora ).
  • Przejdź do pozycji Narzędzia> Opcje> Debugowanie> Ogólne i upewnij się, że pole wyboru Wymagaj, aby pliki źródłowe dokładnie odpowiadały oryginalnej wersji, nie jest zaznaczone.
  • Zaznacz opcję Włącz alokator sterty debugowania systemu Windows (tylko natywna) [VS Community 2017]
  • Czy używasz podróbek firmy Microsoft? Blokuje Edycję i Kontynuuj.
  • Zabij wszystkie instancje * .vshost.exe , wybierając opcję Zakończ drzewo procesów w Menedżerze zadań . VS zregeneruje poprawną instancję.
  • Usuń wszystkie punkty przerwania za pomocą Debug-> Usuń wszystkie punkty przerwania
  • Włącz i Kontynuuj istnieje w menu Narzędzia> Opcje> Debugowanie, a także w ustawieniach projektu . Koniecznie sprawdź oba miejsca. Funkcja edit & Continue nie jest obsługiwana z rozszerzonym ustawieniem Intellitrace.
  • Upewnij się, że informacje o debugowaniu we właściwościach projektu> kompilacja> zaawansowane> dane wyjściowe> informacje o debugowaniu są ustawione na pełne
  • Niektóre wtyczki mogą przeszkadzać. Sprawdź, wyłączając / odinstalowując, a następnie spróbuj ponownie inne rozwiązania.
  • Jeśli nie zwracasz wystarczającej uwagi, błąd, który pojawia się podczas próby rozwiązania tego problemu, może zmienić się na coś innego, co jest łatwiejsze do zdiagnozowania. Np. Metoda zawierająca wyrażenie lambda nie może obsługiwać edycji i kontynuowania.
  • Upewnij się, że zmienna systemowa COR_ENABLE_PROFILINGnie jest ustawiona na 1. Niektóre programy profilujące ustawiają to podczas instalacji i pozostawiają tak po odinstalowaniu. Otwórz wiersz polecenia i wpisz, setaby szybko sprawdzić, czy system ma wpływ, jeśli tak, usuń zmienną lub ustaw ją na 0:

    • W systemie Windows 8 i nowszych wyszukaj System (Panel sterowania).
    • Kliknij łącze Zaawansowane ustawienia systemu .
    • Kliknij opcję Zmienne środowiskowe .
    • Usunąć COR_ENABLE_PROFILING
  • Pamiętaj o nieobsługiwanych scenariuszach (jak zgłoszono w pytaniu) i nieobsługiwanych zmianach .


* przez „ty” mam na myśli gościa strony, który wali głową w klawiaturę, aby znaleźć rozwiązanie.


Możesz edytować tę odpowiedź, aby dodać obejście, jeśli nie ma go tutaj!

beppe9000
źródło
5
To był COR_ENABLE_PROFILING ... nie mam pojęcia, dlaczego został ustawiony. Dzięki. Przestaję teraz uderzać głową w klawiaturę.
Florian Lagg
2
Próbowałem wszystko, ale działało. Wtedy zdałem sobie sprawę, że muszę być w trybie przerwania (debug-> złam wszystko) lub w punkcie przerwania. Dodaj to do swojej listy. msdn.microsoft.com/en-us/library/7932e88z.aspx
Niloofar
1
U mnie działa, dziękuję, czwarta linijka „Usuń zaznaczenie pola wyboru Optymalizuj kod dla trybu debugowania we właściwościach projektu-> Debuguj”
Aljohn Yamaro
2
Jedna rzecz, która rozwiązała ten problem, nie została tutaj wspomniana: musiałem wyłączyć (odznaczyć) opcję „Włącz edycję i kontynuuj” w menu Narzędzia> Opcje> Debugowanie. Jest to całkowite przeciwieństwo tego, co można by pomyśleć intuicyjnie, ale właśnie to naprawiło to dla mnie (tj. Zapobiegło tej denerwującej wiadomości i po prostu pozwól mi edytować mój kod).
leo
1
@leo To wiki społeczności, dzięki czemu możesz swobodnie edytować. Czy przycisk „edytuj” nie działa dla Ciebie? Widzę, że masz wystarczającą reputację, żeby to zrobić. Ps. Dodałem odniesienie do twojej odpowiedzi, więc jest mniej rozproszenia.
beppe9000
23

Jeśli debugujesz aplikację ASP.NET, przejdź do właściwości> WWW> Serwery i upewnij się, że opcja „Włącz i kontynuuj” jest zaznaczona w obszarze Użyj programu Visual Studio Development Server.

żywotność
źródło
3
trzeba również nacisnąć przycisk Pause podczas debugowania, a następnie edytować kod
Alexey Obukhov,
Jeśli używam lokalnego iis, „włącz i kontynuuj” jest wyłączone
Khoshtarkib
11

Miałem ten sam problem. Nawet ponownie zainstalowałem VS 2008, ale problem nie zniknął. Jednak kiedy usunąłem wszystkie punkty przerwania, zaczęło działać.

Debug->Delete All Breakpoints

Myślę, że działo się to, ponieważ usunąłem stronę aspx, która miała punkty przerwania w swoim kodzie, a następnie utworzyłem kolejną stronę o tej samej nazwie. To prawdopodobnie zmyliło VS 2008.

Amer
źródło
5

Kilka rzeczy do sprawdzenia

  • Upewnij się, że kompilacja jest ustawiona na Debug vs. Release
  • Upewnij się, że nie uruchamiasz procesu w trybie mieszanym
  • W przypadku komputera 64-bitowego Upewnij się, że docelowy procesor CPU jest ustawiony na x86, a nie na AnyCPU

EDYTOWAĆ

Uważam, że nie powinno to mieć znaczenia, ale upewnij się, że proces hostingu jest włączony dla platformy docelowej. Prawdopodobnie nie pomoże.

Jeśli powtórzy się dla nowych projektów, może to być coś jeszcze bardziej subtelnego. Spróbowałbym następujących.

  • Kopia zapasowa HKCU: \ Software \ Wow6432Node \ VisualStudio \ 9.0 (może po prostu zmień nazwę)
  • Usuń ten sam klucz
  • Spróbuj ponownie
JaredPar
źródło
2
Co to jest proces w trybie mieszanym? Próbowałem nawet nowego projektu winforms.
nightcoder
Nie mam HKCU: \ Software \ Wow6432Node \ node
nightcoder
@nightcoder, a następnie wypróbuj HKCU: \ Software \ Microsoft \ VisualStudio \ 9.0
JaredPar
5

Żadne z powyższych rozwiązań nie działało dla mnie (działa na komputerze 64x).

W końcu kliknąłem 'advanced compiler settings'i ODPOWIEDZIŁEM 'enable optimizations 'i mogę teraz przechodzić przez kod i edytować podczas debugowania.

Nifle
źródło
2
Wygląda na to, że to tylko Visual Basic: msdn.microsoft.com/en-us/library/07bysfz2%28v=vs.100%29.aspx
Marcel
Pracuje dla mnie! VS2013, VB.Net, ramka 3.5
MiBol
1
A gdzie są te ustawienia?
vapcguy
5

Opcja „Edytuj i kontynuuj”, gdy jest włączona, pozwala na edycję kodu tylko wtedy, gdy jest w trybie przerwania, np. Przez wstrzymanie wykonywania przez wyjątek lub przez uderzenie w punkt przerwania.

Oznacza to, że nie możesz edytować kodu, gdy wykonanie nie jest wstrzymane! Jeśli chodzi o debugowanie (ASP.NET) projektów internetowych, jest to bardzo nieintuicyjne, ponieważ często chcesz wprowadzać zmiany między żądaniami. W tej chwili kod, który debugujesz (prawdopodobnie) nie jest uruchomiony, ale nie jest też wstrzymany!
Aby rozwiązać ten problem, możesz kliknąć „Przerwij wszystko” (lub nacisnąć Ctrl+ Alt+ Break). Alternatywnie, ustaw gdzieś punkt przerwania (np. W Page_Loadzdarzeniu), a następnie załaduj ponownie stronę, aby wykonanie zatrzymało się, gdy osiągnie punkt przerwania, a teraz możesz edytować kod. Nawet kod w .csplikach.

Protector 1
źródło
4

Dla mnie z powodu, którego nie rozumiem, ustawienie „Generuj informacje debugowania” w „Zaawansowanych ustawieniach kompilatora” zostało ustawione na „tylko pdb” zamiast „Pełne”.

Domyślnie ten parametr jest zawsze ustawiony na „Full”, ale tajemniczy poltergeist zmienił ten parametr ostatniej nocy. :)

PS Jestem w Visual Basic .Net z Visual Studio 2010

Samuel
źródło
4

Jeśli problem dotyczy aplikacji ASP.NET, upewnij się, że masz włączoną edycję i kontynuację na karcie sieci Web (w porównaniu z 2010). We wcześniejszych wersjach istniało również osobne ustawienie debugowania ASP.NET.

Pozdrowienia,

Adam.

Adam
źródło
4

Zauważyłem, że chociaż pod właściwościami projektu zakładka build & debug są ustawione na Debug, a wszystkie inne ustawienia są poprawne, nadal otrzymuję komunikat, jednak po przekopaniu się więcej w menu Build wybierz Configurations Manager ... i upewnij się, że wybrano Debug również tam w dwóch miejscach. idź, wyobraź sobie ... w ilu różnych miejscach trzeba ustawić debugowanie ?????? mimo że ustawisz Projekt - Konfiguracja na Debuguj, a następnie w obszarze Kompilacja - Menedżer nie zostanie zmieniony, więc zmienisz tam również to samo ustawienie Konfiguracja projektu - znowu wydaje się, że problem Microsoft .......

RAL
źródło
4

Ten problem jest spowodowany ustawieniem funkcji Intellitrace

Jeśli funkcja Intellitrace jest włączona, upewnij się, że zaznaczone jest tylko zdarzenie Intellitrace

W przeciwnym razie nie pozwoli to na edycję i kontynuowanie.

Jeśli klikniesz na opcje Intellitrace, zobaczysz ostrzeżenia.

KuldeepVerma
źródło
To jest dla mnie problem!
beppe9000
Przeszukano wszystkie opcje w Visual Studio Tools pod kątem „Intellitrace” i nie ma takiej opcji w VS Community 2017. Pomaga tutaj trochę więcej szczegółów.
vapcguy
4

Poniższe zdjęcia pomogły mi w używaniu VS2010:

przejdź do Narzędzia, Opcje, Debugowanie, Ogólne i upewnij się, że opcja „Wymagaj dokładnego dopasowania plików źródłowych do wersji oryginalnej” nie jest zaznaczona.

Vinay
źródło
3

Dzieje się tak, gdy debugger nie osiągnął punktu przerwania lub nie trafiłeś Przerwij wszystko (pauza). To nie może być takie proste, prawda?

Richard Anthony Hein
źródło
Dzieje się tak, gdy debugger osiągnął punkt przerwania i próbuję coś zmienić w kodzie.
nightcoder
3

Błąd mówi, że możliwa przyczyna to: „debugowany kod został zoptymalizowany w czasie kompilacji lub wykonywania”. Przejdź do Właściwości projektu-> Debuguj i odznacz pole Optymalizuj kod dla trybu debugowania.

pbalaga
źródło
3

Miałem ten problem w Microsoft Visual Studio 2008 i rozwiązanie jest proste. po uruchomieniu projektu ustaw tryb „Debugowanie”, a nie „Wydanie”. Przydatne może być rozwiązanie innej osoby.

user2412450
źródło
2

Jeśli utworzę nowy projekt, zmiany podczas debugowania nie działają. Jeśli utworzę nową witrynę internetową, zmiany podczas debugowania będą działać zgodnie z oczekiwaniami.

Greg
źródło
1

W moim przypadku wystarczy przywrócenie domyślnych ustawień debugera i ustawienie IntelliTrace-> tylko zdarzenia intellytrace pomagają

Yuriy Vikulov
źródło
1

Niektóre rzeczy, które wydawały się pomagać w korzystaniu z VS2010:

  • przejdź do Narzędzia, Opcje, Debugowanie, Ogólne i upewnij się, że opcja „Wymagaj dokładnego dopasowania plików źródłowych do wersji oryginalnej” nie jest zaznaczona.
  • wiele instancji .vshost.exe może zostać pominiętych, np. z odłączenia debugera VS od zatrzymanego procesu. Będzie to również kolidować z punktami przerwania i kompilacjami. Użyj Menedżera zadań na karcie Procesy, aby zabić wszystkie wystąpienia .vshost.exe, klikając prawym przyciskiem myszy każdą instancję i wybierając opcję Zakończ drzewo procesów. VS utworzy nową instancję.
Scott
źródło
1

Usunąłem zbiór danych z mojego projektu, ponieważ go nie używałem. Potem mogłem modyfikować program podczas debugowania.

ashkan_jami
źródło
1

Zrobiłem wszystkie zmiany wymienione w każdej innej odpowiedzi i żadna nie zadziałała. Czego się nauczyłem? Włącz i Kontynuuj istnieje w menu Narzędzia> Opcje> Debugowanie, a także w ustawieniach projektu. Po sprawdzeniu obu opcji Włącz i Kontynuuj zadziałało.

stevebot
źródło
3
Jakie ustawienia projektu? Jesteś zbyt ogólnikowy
Adaptabi
@Adaptabi Chodziło o to, że jeśli klikniesz prawym przyciskiem myszy nazwę projektu, kliknij Właściwości, a następnie (jeśli jest to projekt internetowy) kliknij Sieć, jest tam pole wyboru, aby upewnić się, że jest tam zaznaczone „Włącz edycję i kontynuuj”.
vapcguy
1

Wpadłem na to dzisiaj - okazuje się, że ustawienie opcji Debug Info na pdb-only (lub brak, jak sobie wyobrażam) uniemożliwi działanie funkcji Edit i Continue.

Najpierw upewnij się, że informacje o debugowaniu są ustawione na „pełne”!

Właściwości projektu> Kompilacja> Zaawansowane> Dane wyjściowe> Informacje o debugowaniu

Guy Danus
źródło
1

Wydaje się to nielogiczne, ale jedynym sposobem było wyłączenie edycji i kontynuowanie z opcji VS 2017 ... Następnie edycja AspNet i kontynuacja zaczęła działać ...

FRK
źródło
Dokładnie! Jest to sprzeczne z intuicją, ale w moim przypadku również zadziałało wyłączenie opcji „edytuj i kontynuuj”. Nie spowoduje to „wymiany na gorąco” wprowadzanych przez Ciebie zmian, ale przynajmniej możesz po prostu edytować kod, który zacznie obowiązywać po ponownym uruchomieniu aplikacji.
leo
1

w moim przypadku działało odznaczenie opcji „Użyj zarządzanego trybu zgodności” w sekcji

Narzędzia -> Opcje -> Debugowanie

TBN: zaznaczenie lub odznaczenie „Wymagaj, aby plik źródłowy dokładnie pasował do wersji oryginalnej” wydaje się nie wpływać na E&C

Mam nadzieję, że to pomoże.

B. Cafaro
źródło
1

Włącz edycję i kontynuuj tylko pracę, uruchom IIS Express. Nie pracuj w lokalnym ISS lub zewnętrznym hoście.

Ahmad Aghazadeh
źródło
1

Miałem ten irytujący problem, odkąd zaktualizowałem VS 2019 do 16.4.3 i spowodowałem dużo bólu głowy.
W końcu rozwiązałem problem w ten sposób:

1. Zatrzymaj debugowanie
2. Wybierz rozwiązanie z „Eksploratora rozwiązań”
3. W oknie Właściwości zmień właściwość „Aktywna konfiguracja” z „Zwolnienie | Dowolny procesor” na „Debugowanie | Dowolny procesor”
4 W Debug> Opcje> Ogólne Zaznacz pole wyboru Edytuj i kontynuuj

To zadziałało dla mnie i mam nadzieję, że zadziała również dla Ciebie.

Masarwa
źródło
0

osadzanie typów międzyoperacyjnych Visual Studio powinno mieć wartość false

Wilma Fingerdoo
źródło
0

Zdarzyło mi się to w połączonym pliku zajęć. Reszta projektu pozwoliła na E&C, ale dostałem ten sam błąd podczas edycji połączonego pliku. Rozwiązaniem było rozbicie połączonego pliku na swój własny projekt i odniesienie do projektu.

jlo-gmail
źródło
0

Miałem ten sam problem. Mój problem polegał na tym, że mogłem zmodyfikować plik, ale nie inny (oba są w tym samym projekcie). Później stwierdziłem, że plik, którego nie mogłem zmodyfikować, był również częścią innego projektu. Że inny projekt (test jednostkowy) nie został załadowany, a inteligentny debuger VS pokazuje błąd, że zestaw dla tego danego pliku nie został załadowany, a zmiany są niedozwolone. Jakie dziwne!

W związku z tym musiałem zwolnić projekt testu jednostkowego i kontynuować debugowanie EnC.

Ajay
źródło
0

W rozwiązaniu miałem projekt bazy danych, który zatrzymał edycję projektu webforms.

Kliknąłem „Unload” w projekcie bazy danych i wszystko działa teraz słodko.

Adam
źródło
0

W przypadku VS2017 może pomóc usunąć plik .suo z twojego rozwiązania, zadziałało dla mnie. :)

Nieksa
źródło