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.
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!
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.
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.
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.
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
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 !
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.
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.
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