Jak debugować projekty zewnętrznej biblioteki klas w Visual Studio?

137

Mam projekt (A), który odwołuje się do zestawu z biblioteki klas projektu zewnętrznego (B), która znajduje się w innym rozwiązaniu vs.

Nie rozumiem jeszcze, w jaki sposób mogę skutecznie debugować bibliotekę klas z poziomu B podczas uruchamiania programu z projektu A. Czy jest coś, co muszę włączyć w projekcie B, na przykład informacje o debugowaniu itp., Abym mógł wkroczyć w czasie debugowania z poziomu A?

Z góry dziękuję.

Konstantinos
źródło

Odpowiedzi:

202

Spróbuj wyłączyć opcję Tylko mój kod (JMC).

  • Narzędzia -> Opcje -> Debugger
  • Odznacz „Włącz tylko mój kod”

Domyślnie debuger próbuje ograniczyć widok świata do kodu zawartego tylko w rozwiązaniu. Czasami jest to naprawdę przydatne, ale jeśli chcesz debugować kod, którego nie ma w Twoim rozwiązaniu (tak jak jest w Twojej sytuacji), musisz wyłączyć JMC, aby go zobaczyć. W przeciwnym razie kod będzie traktowany jako zewnętrzny iw dużej mierze niewidoczny dla użytkownika.

EDYTOWAĆ

Gdy złamiesz kod, spróbuj wykonać następujące czynności.

  • Debuguj -> Windows -> Moduły
  • Znajdź bibliotekę DLL dla projektu, który Cię interesuje
  • Kliknij prawym przyciskiem myszy -> Załaduj symbole -> Wybierz ścieżkę do .PDB dla innego projektu
JaredPar
źródło
2
określone pole wyboru było już odznaczone. Zauważyłem jednak, że wchodzi on w metodę biblioteki zewnętrznej, ale przechodzi dalej, gdy próbuję wywołać metodę, która jest częścią interfejsu.
Konstantinos,
Może być konieczne przejście do właściwości biblioteki DLL i upewnienie się, że opcja Copy Local ma wartość True. W przeciwnym razie moduły nie będą mogły znaleźć pliku .pdb w celach informacyjnych.
Bryan Rayner
Wydaje się, że Just My Code nie robi żadnej różnicy (mogę wskoczyć do zewnętrznego kodu nawet przy włączonej opcji), ale znalezienie modułu w debugerze pomaga.
TheOperator
3
W tym folderze nie znaleziono pasującego pliku symboli.
Christine
1
Jeśli nie masz plików PDB dla przywoływanego modułu, ReSharper może być użyty do dekompilacji plików binarnych przy użyciu opcji „Załaduj symbole za pomocą ReSharper Deecompiler” w menu prawym przyciskiem myszy w Debug / Windows / Modules. bardzo potężny.
emilast
12

Wkurza mnie to od jakiegoś czasu. To, co zwykle robię, to odbudowywanie mojej zewnętrznej biblioteki w trybie debugowania, a następnie kopiowanie zarówno pliku .dll, jak i .pdb do kosza mojej witryny. To pozwala mi wejść do kodu biblioteki.

Strażnik
źródło
10

Przyjmij ścieżkę

Projekt A

C:\Projects\ProjectA

Projekt B

C:\Projects\ProjectB

a dll ProjectB jest w

C:\Projects\ProjectB\bin\Debug\

Aby debugować w programie ProjectBfrom ProjectA, wykonaj następujące czynności

  1. Skopiuj Bbibliotekę dll z bibliotekami DLL .PDBdo ProjectAkatalogu kompilacji.
  2. Teraz debuguj ProjectA. Gdy kod dotrze do części, w której musisz wywołać metodę biblioteki DLL lub zdarzenia itp. Podczas debugowania, naciśnij, F11aby przejść do kodu biblioteki DLL.

UWAGA: NIE PRZEGAP SKOPIOWANIA PLIKU .PDB

Sarath Avanavu
źródło
5

Uruchamiam dwie instancje Visual Studio - jedną dla zewnętrznej biblioteki dll i jedną dla aplikacji głównej.
We właściwościach projektu zewnętrznej biblioteki DLL ustaw następujące elementy:

Tworzenie wydarzeń:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Odpluskwić:

  • Uruchom program zewnętrzny: C:\<path-to-main>\bin\debug\<AppName>.exe

  • Katalog roboczy C:\<path-to-main>\bin\debug

W ten sposób za każdym razem, gdy buduję zewnętrzną bibliotekę dll, jest ona aktualizowana w katalogu głównej aplikacji. Jeśli trafię na debugowanie z projektu zewnętrznej biblioteki dll - główna aplikacja działa, ale debugger uderza tylko w punkty przerwania w zewnętrznej bibliotece dll. Jeśli trafię na debugowanie z głównego projektu, główna aplikacja działa z ostatnio zbudowaną zewnętrzną biblioteką dll, ale teraz debugger osiąga tylko punkty przerwania w głównym projekcie.

Zdaję sobie sprawę, że jeden debugger wykona zadanie dla obu, ale w ten sposób łatwiej mi jest utrzymać te dwa prosto.

MatrixManAtYrService
źródło
1

[według Martina Becketta, gościa, który przesłał mi tę odpowiedź]

Możesz debugować w zewnętrznej bibliotece.

Na karcie ustawień projektu poszukaj „katalogów Visual Studio” w polu „kod źródłowy” i uwzględnij ścieżkę do źródeł openCV. Następnie upewnij się, że pliki .pdb dla każdej biblioteki DLL debugowania znajdują się w tym samym katalogu, co dll.

TripleS
źródło
0

Miałem podobny problem, ponieważ moje punkty przerwania w projekcie (B) nie zostały trafione. Moim rozwiązaniem było przebudowanie projektu (B), a następnie debugowanie projektu (A), ponieważ biblioteki DLL musiały zostać zaktualizowane.

Program Visual Studio powinien umożliwiać debugowanie w bibliotece zewnętrznej.

Stefan Mitic
źródło
0

Odwołania NuGet

Załóżmy, że -Project_A (tworzy project_a.dll) -Project_B (tworzy project_b.dll) i Project_B odwołania do Project_A przez pakiety NuGet, a następnie po prostu skopiuj project_a.dll, project_a.pdb do folderu Project_B / Packages. W efekcie to powinno zostać skopiowane do / bin.

Teraz debuguj Project_A. Gdy kod dotrze do części, w której musisz wywołać metodę biblioteki DLL lub zdarzenia itp. Podczas debugowania, naciśnij klawisz F11, aby przejść do kodu biblioteki DLL.

jasmintmp
źródło