Mam dwa rozwiązania w moim obszarze roboczym, powiedzmy A i B.
Rozwiązanie A to starszy projekt, którego kodowanie zakończyłem jakiś czas temu. W rozwiązaniu B potrzebuję niektórych klas z rozwiązania A. Aby to zrobić, dodaję odwołanie do biblioteki dll jednego z projektów w rozwiązaniu A.
Problem pojawia się, gdy próbuję debugować. Chcę mieć również możliwość wejścia do kodu A. Visual Studio nie jest w stanie załadować kodu dla tych klas („Brak kodu źródłowego dla bieżącej lokalizacji”) i mogę tylko wyświetlić dezasemblację, która nie jest przydatna.
Jedynym sposobem, w jaki znam, aby debugować klasy z rozwiązania A, jest uruchomienie rozwiązania B, odłączenie wszystkich procesów (w pozycji menu Debugowanie) i dołączenie procesu do rozwiązania A.
Jest to jednak bardzo niewygodne i mogę jednocześnie debugować tylko A LUB B.
Czy istnieje sposób, aby zezwolić na przejście do kodu bibliotek DLL, do których istnieją odwołania (dla których mam kod źródłowy)?
Rozwiązanie: Mój błąd polegał na tym, że myślałem, że projekt może być tylko częścią jednego rozwiązania. W rzeczywistości projekt może być częścią dowolnej liczby rozwiązań.
Gdy potrzebujesz odwołać się do starego projektu, po prostu dodaj projekt do rozwiązania. Odbywa się to, klikając prawym przyciskiem myszy nowe rozwiązanie w Eksploratorze rozwiązań> Dodaj> istniejący projekt.
Następnie będziesz mógł dodać odwołanie do projektu. Jak napisali inni, prawdopodobnie powinieneś całkowicie unikać używania odwołań dll do własnego kodu (lub innego kodu, który możesz potrzebować zmienić i debugować).
Bardzo dobre odniesienie do tego, jak należy projektować rozwiązania, można znaleźć w witrynie MSDN .
Odpowiedzi:
Jeśli masz odniesienie do projektu , powinno działać natychmiast.
Jeśli jest to odwołanie do pliku (dll), symbole debugowania (plik „pdb”) muszą znajdować się w tym samym folderze, co dll. Sprawdź, czy Twoje projekty generują symbole debugowania (właściwości projektu => Build => Advanced => Output / Debug Info = full); a jeśli skopiowałeś dll, umieść z nim pdb.
Możesz także ładować symbole bezpośrednio w IDE, jeśli nie chcesz kopiować żadnych plików, ale wymaga to więcej pracy.
Najłatwiej jest skorzystać z referencji do projektów!
źródło
Miałem ten sam problem. On jest tym, co znalazłem:
1) upewnij się, że wszystkie projekty używają tej samej struktury (jest to kluczowe!)
2) w Narzędzia / Opcje> Debugowanie> Ogólne upewnij się, że opcja „Włącz tylko mój kod (tylko zarządzany) NIE jest zaznaczona”
3) w Narzędzia / Opcje> Debugowanie> Symbole wyczyść wszystkie zapisane w pamięci podręcznej symbole, odznacz i usuń wszystkie lokalizacje folderów w polu listy „Lokalizacje plików symboli (.pdb)” z wyjątkiem domyślnego „Serwery symboli firmy Microsoft”, ale nadal też odznacz je. Usuń także wszystkie ścieżki statyczne z pola tekstowego „Symbole pamięci podręcznej w tym katalogu”. Kliknij przycisk „Opróżnij pamięć podręczną symboli”. Na koniec upewnij się, że opcja „Tylko określone moduły” jest zaznaczona.
4) w menu Build / Configuration Manager dla wszystkich projektów upewnij się, że konfiguracja jest w trybie debugowania.
źródło
Kolejną kwestią, o której należy pamiętać, jest upewnienie się, że odnośne biblioteki DLL nie są zainstalowane w GAC. Po zakończeniu testów zainstalowałem moje biblioteki DLL w GAC, aby przeprowadzić testy na poziomie systemu. Później, gdy musiałem ponownie debugować kod, nie mogłem wejść do zestawów, do których się odwołujesz, dopóki nie usunąłem ich z GAC.
źródło
Krok 1: Przejdź do Narzędzia -> Opcja -> Debugowanie
Krok 2: Odznacz opcję Włącz tylko mój kod
Krok 3: Odznacz opcję Wymagaj dokładnego dopasowania pliku źródłowego do wersji oryginalnej
Krok 4: Odznacz opcję Przejdź przez właściwości i operatory
Krok 5: Przejdź do właściwości projektu -> Debuguj
Krok 6: zaznacz opcję Włącz debugowanie kodu natywnego
źródło
Miałem
*.pdb
pliki w tym samym folderze i korzystałem z opcji Arindama , ale nadal nie działało. Okazuje się, że musiałem włączyć opcję Włącz debugowanie kodu natywnego które można znaleźć w sekcji Właściwości projektu> Debuguj .źródło
Jeśli chcesz ustawić punkt przerwania w kodzie źródłowym biblioteki DLL, do której się odwołuje, najpierw upewnij się, że masz do niej dostępny plik pdb. Następnie możesz po prostu otworzyć powiązany plik kodu źródłowego i ustawić tam punkt przerwania. Plik źródłowy nie musi być częścią rozwiązania. Jak wyjaśniono w Jak mogę ustawić punkt przerwania w przywoływanym kodzie w programie Visual Studio?
Możesz przeglądać swoje punkty przerwania w oknie punktów przerwania, dostępnym poprzez Debugowanie -> Windows -> Punkty przerwania.
Takie podejście ma tę zaletę, że nie musisz dodawać istniejącego projektu do swojego rozwiązania tylko w celu debugowania, ponieważ pomijanie go zaoszczędziło mi dużo czasu na kompilację. Oczywiście zbudowanie rozwiązania zawierającego tylko jeden projekt jest znacznie szybsze niż zbudowanie rozwiązania zawierającego wiele takich projektów.
źródło
Upewnij się, że biblioteka DLL nie jest zarejestrowana w GAC. Program Visual Studio użyje wersji w GAC i prawdopodobnie nie będzie zawierał informacji o debugowaniu.
źródło
Nie chcę włączać projektu zewnętrznej biblioteki klas do niektórych moich rozwiązań, więc wchodzę do zestawów, które używam w inny sposób.
Moje rozwiązania mają katalog „Common Assemblies”, który zawiera moje własne biblioteki DLL z innych projektów. Biblioteki DLL, do których się odwołuję, mają również towarzyszące im pliki PDB do debugowania.
Aby debugować i ustawić punkty przerwania, ustawiam punkt przerwania w źródle używanej aplikacji, w którym wywołuję metodę lub konstruktor z zestawu, a następnie wykonuję INTO (F11) wywołanie metody / konstruktora.
Debuger załaduje plik źródłowy zestawu w programie VS i w tym momencie można ustawić nowe punkty przerwania w zestawie.
Nie jest to proste, ale działa, jeśli nie chcesz dołączać nowego odwołania do projektu i po prostu chcesz odwołać się do zestawu udostępnionego.
źródło
To musi działać. Kiedyś debugowałem plik .exe i dll w tym samym czasie! Proponuję: 1) Uwzględnij ścieżkę dll w swoim projekcie B, 2) Następnie skompiluj debugowanie projektu A 3) Sprawdź, czy ścieżka wskazuje na plik A dll i de pdb .... 4) Następnie zacznij od debugowania projektu B i jeśli wszystko jest w porządku, będziesz mógł debugować w obu projektach!
źródło
Najbardziej prostym sposobem, jaki znalazłem przy użyciu VisualStudio 2019 do debugowania biblioteki zewnętrznej, do której odwołujesz się w NuGet, jest wykonanie następujących kroków:
Narzędzia> Opcje> Debugowanie> Ogólne> Odznacz „Włącz tylko mój kod”
Przejdź do Eksplorator zestawu> Otwórz z pamięci podręcznej pakietów NuGet
Wpisz nazwę pakietu NuGet, który chcesz debugować w polu wyszukiwania i kliknij przycisk „OK”
W Eksploratorze złożenia kliknij prawym przyciskiem myszy zaimportowany zespół i wybierz „Generuj Pdb”
Wybierz niestandardową ścieżkę, w której chcesz zapisać plik .PDB i strukturę, dla której chcesz go wygenerować
Skopiuj plik .PDB z folderu wygenerowanego do folderu Debug i możesz teraz ustawić punkty przerwania w kodzie biblioteki tego zestawu
źródło