Jak debugować odwołaną bibliotekę dll (mając pdb)

Moje pytanie dotyczy Visual Studio 2008, chociaż przypuszczam, że w VS2005 powinno być tak samo

Mam dwa rozwiązania w moim miejscu pracy, powiedzmy A I B.

Rozwiązanie a to starszy projekt, który ukończyłem jakiś czas temu. W rozwiązaniu B, muszę użyć kilku klas z rozwiązania A. Aby to zrobić, dodaję odniesienie do dll jednego z projektów w rozwiązaniu A.

Problem polega na tym, że próbuję debugować. Chcę być w stanie wejść do kodu A. Visual studio nie jest w stanie załadować kodu dla tych klas ("nie ma kodu źródłowego dostępnego dla bieżącej lokalizacji.") i mogę tylko zobaczyć demontaż, który nie jest przydatny.

Jedynym sposobem na debugowanie klas z rozwiązania A jest uruchomienie rozwiązania B, odłączenie wszystkich procesów (w pozycji menu debugowania) i dołączenie procesu z rozwiązania A.

Jest to jednak bardzo niewygodne i mogę debugować tylko A lub B naraz.

Czy jest sposób na wejście w kod odnośne biblioteki DLL (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ń.
Jeśli chcesz odwołać się do starego projektu, po prostu dodaj projekt do rozwiązania. Można to zrobić klikając prawym przyciskiem myszy nowe rozwiązanie w Eksploratorze rozwiązań > Dodaj > istniejący projekt.
Następnie będziesz mógł dodać odniesienie do projektu. Jako inni pisali, 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 sposobu projektowania rozwiązań można znaleźć w MSDN.

Author: Jarekczek, 2009-07-15

8 answers

Jeśli masz projekt Referencja, powinna działać natychmiast.

Jeśli jest to odniesienie 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); i jeśli masz skopiowane dll, umieść pdb z nim.

Możesz również załadować symbole bezpośrednio w IDE, jeśli nie chcesz kopiować żadnych pliki, ale to więcej pracy.

Najprostszą opcją jest użycie referencji do projektów!

 90
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-15 09:44:37

Miałem ten sam problem. On jest tym co znalazłem:

1) Upewnij się, że wszystkie projekty używają tego samego frameworka (to jest kluczowe!)

2) W Narzędzia/Opcje > debugowanie>ogólne upewnij się, że "Włącz tylko Mój kod (tylko zarządzany) nie jest zaznaczony

3) w Tools/Options>Debugging>Symbols wyczyść wszystkie buforowane symbole, odznacz i usuń wszystkie lokalizacje folderów w "Symbols file (.pdb) lokalizacje "listbox z wyjątkiem domyślnego "Microsoft symbol Servers", ale nadal odznaczyć go zbyt. Również usunąć wszelkie statyczne ścieżki w polu tekstowym "symbole pamięci podręcznej w tym katalogu". Kliknij przycisk" Empty Symbols Cache". Na koniec upewnij się, że Przycisk radiowy" tylko określone moduły " jest zaznaczony.

4) w menu Build/Configuration Manager dla wszystkich projektów upewnij się, że konfiguracja jest w trybie debugowania.

 33
Author: scott_f,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 08:16:55

Kolejna kwestia, o której należy pamiętać, upewnij się, że odnośne biblioteki DLL nie są zainstalowane w GAC. Po przetestowaniu zainstalowałem moje biblioteki DLL w GAC, aby wykonać testowanie na poziomie systemu. Później, kiedy musiałem ponownie debugować mój kod, nie mogłem wejść do odwołanych zestawów, dopóki nie usunąłem ich z GAC.

 9
Author: KevinHou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-03 15:26:44

Jeśli chcesz ustawić punkt przerwania w kodzie źródłowym odwołanej biblioteki dll, najpierw upewnij się, że masz Dostępny dla niego 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ą Twojego rozwiązania. Jak wyjaśniono w Jak ustawić punkt przerwania w kodzie odniesienia w programie Visual Studio?

Możesz przejrzeć swoje punkty przerwania w oknie punktów przerwania, dostępnym przez Debug - > Windows - > Punkty przerwania.

To podejście ma tę zaletę, że nie musisz dodawać istniejącego projektu do swojego rozwiązania tylko do celów debugowania, ponieważ pominięcie go zaoszczędziło mi dużo czasu. Oczywiście, budowanie rozwiązania z tylko jednym projektem w nim jest znacznie szybsze niż budowanie rozwiązania z wielu z nich.

 2
Author: Carl in 't Veld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26

Krok 1: Przejdź do Narzędzia-- > opcja-- > debugowanie

Krok 2: Odznacz Opcję Włącz Tylko Mój Kod

Krok 3: odznacz pole Wymagaj pliku źródłowego dokładnie pasującego do oryginalnej wersji

Krok 4: odznacz krok nad właściwościami i operatorami

 1
Author: Arindam Dhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-19 16:00:01

To musi zadziałać. Kiedyś debugowałem .plik exe i dll w tym samym czasie ! Proponuję 1) Dołącz ścieżkę dll w projekcie B, 2) następnie skompiluj w debugowaniu projektu A 3) Kontrola, że ścieżka wskazuje na pliku dll i de pdb.... 4) po tym zaczniesz debugować projekt B i jeśli wszystko jest w porządku, będziesz mógł debugować w obu projektach !

 0
Author: Matthieu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-15 09:51:16

Nie chcę włączać zewnętrznego projektu biblioteki klas do niektórych moich rozwiązań, więc wchodzę w składy, które zuż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 ustawiać punkty przerwania, ustawiam punkt przerwania w źródle aplikacji, gdzie wywołuję metodę lub konstruktor z assembly, a następnie przejść do (F11) wywołania metody / konstruktora.

Debugger załaduje plik źródłowy zestawu w VS i nowe punkty przerwania wewnątrz zestawu mogą być ustawione w tym punkcie.

Nie jest to proste, ale działa, jeśli nie chcesz dodawać nowego odniesienia do projektu, a zamiast tego po prostu chcesz odwołać się do współdzielonego zestawu.

 0
Author: jlafay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 12:52:14

Miałem *.pdb pliki w tym samym folderze i użyłem opcji z Arindam , ale nadal nie działało. Okazało się, że musiałem włączyć włączyć debugowanie kodu natywnego, które można znaleźć w Właściwości projektu > Debug.

 0
Author: Roald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 09:34:36