Wie debugge ich externe Klassenbibliotheksprojekte in Visual Studio?


136

Ich habe ein Projekt (A), das auf eine Assembly aus einer externen Projektklassenbibliothek (B) verweist, die sich in einer anderen vs-Lösung befindet.

Ich habe noch nicht verstanden, wie ich die Klassenbibliothek effizient von B aus debuggen kann, während ich das Programm von Projekt A aus starte. Muss ich in Projekt B etwas aktivieren, z. B. Debug-Informationen usw., damit ich zur Debug-Zeit von A aus einsteigen kann?

Danke im Voraus.

Antworten:


202

Deaktivieren Sie Just My Code (JMC).

  • Extras -> Optionen -> Debugger
  • Deaktivieren Sie "Nur meinen Code aktivieren".

Standardmäßig versucht der Debugger, die Ansicht der Welt auf Code zu beschränken, der nur in Ihrer Lösung enthalten ist. Dies ist manchmal sehr hilfreich, aber wenn Sie Code debuggen möchten, der nicht in Ihrer Lösung enthalten ist (wie es Ihre Situation ist), müssen Sie JMC deaktivieren, um ihn anzuzeigen. Andernfalls wird der Code als extern behandelt und ist Ihrer Ansicht nach weitgehend verborgen.

BEARBEITEN

Wenn Sie in Ihrem Code kaputt sind, versuchen Sie Folgendes.

  • Debug -> Windows -> Module
  • Finden Sie die DLL für das Projekt, an dem Sie interessiert sind
  • Klicken Sie mit der rechten Maustaste -> Symbole laden -> Wählen Sie den Pfad zur PDF-Datei für Ihr anderes Projekt aus

2
Das spezifische Kontrollkästchen wurde bereits deaktiviert. Was mir jedoch aufgefallen ist, ist, dass es in eine Methode der externen Bibliothek eingeht, aber es geht über, wenn ich versuche, eine Methode aufzurufen, die Teil einer Schnittstelle ist.
Konstantinos

Möglicherweise müssen Sie zu den Eigenschaften einer DLL gehen und sicherstellen, dass Copy Local auf True gesetzt ist. Andernfalls können Module die PDF-Datei nicht als Referenz finden.
Bryan Rayner

Nur mein Code scheint keinen Unterschied zu machen (ich kann auch bei aktiviertem Code in externen Code springen), aber das Auffinden des Moduls im Debugger hilft.
TheOperator

3
In diesem Ordner wurde keine passende Symboldatei gefunden.
Christine

1
Wenn Sie keine PDB-Dateien für ein Modul haben, auf das verwiesen wird, können Sie mit ReSharper Binärdateien mithilfe der Option "Symbole mit ReSharper Deecompiler laden" im Kontextmenü unter Debug / Windows / Module dekompilieren. sehr kraftvoll.
Emilast

12

Das nervt mich schon seit einiger Zeit. Normalerweise erstelle ich meine externe Bibliothek im Debug-Modus neu und kopiere dann sowohl die DLL- als auch die PDF-Datei in den Papierkorb meiner Website. Dadurch kann ich in den Bibliothekscode eintreten.


9

Nehmen Sie den Weg von

Projekt A

C:\Projects\ProjectA

Projekt B

C:\Projects\ProjectB

und die DLL von ProjectB ist in

C:\Projects\ProjectB\bin\Debug\

Gehen Sie wie folgt ProjectBvor ProjectA, um in zu debuggen

  1. Kopieren Sie Bdie DLL mit den DLLs .PDBin das ProjectAKompilierungsverzeichnis.
  2. Jetzt debuggen ProjectA. Wenn der Code den Teil erreicht, an dem Sie beim Debuggen die Methode oder Ereignisse usw. F11der DLL aufrufen müssen, drücken Sie , um in den Code der DLL zu gelangen.

HINWEIS: VERPASSEN SIE NICHT, DIE .PDB-DATEI ZU KOPIEREN


5

Ich führe zwei Instanzen von Visual Studio aus - eine für die externe DLL und eine für die Hauptanwendung.
Legen Sie in den Projekteigenschaften der externen DLL Folgendes fest:

Ereignisse erstellen:

  • 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"

Debuggen:

  • Externes Programm starten: C:\<path-to-main>\bin\debug\<AppName>.exe

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

Auf diese Weise wird die externe DLL beim Erstellen im Verzeichnis der Hauptanwendung aktualisiert. Wenn ich Debug aus dem Projekt der externen DLL drücke, wird die Hauptanwendung ausgeführt, aber der Debugger trifft nur Haltepunkte in der externen DLL. Wenn ich im Hauptprojekt auf Debug klicke, wird die Hauptanwendung mit der zuletzt erstellten externen DLL ausgeführt, aber jetzt trifft der Debugger nur noch auf Haltepunkte im Hauptprojekt.

Mir ist klar, dass ein Debugger die Arbeit für beide erledigt, aber ich finde es einfacher, die beiden auf diese Weise gerade zu halten.


1

[laut Martin Beckett, dem Typ, der mir diese Antwort geschickt hat]

Sie können in einer externen Bibliothek debuggen.

Suchen Sie auf der Registerkarte "Projekteinstellungen" im Feld "Quellcode" nach "Visual Studio-Verzeichnissen" und geben Sie den Pfad zu den openCV-Quellen an. Stellen Sie dann sicher, dass sich die PDF-Dateien für jede Debug-DLL im selben Verzeichnis wie die DLL befinden.


0

Ich hatte ein ähnliches Problem, da meine Haltepunkte in Projekt (B) nicht erreicht wurden. Meine Lösung bestand darin, das Projekt (B) neu zu erstellen und dann das Projekt (A) zu debuggen, da die DLLs aktualisiert werden mussten.

Visual Studio sollte es Ihnen ermöglichen, in einer externen Bibliothek zu debuggen.


0

NuGet-Referenzen

Angenommen, die Verweise -Project_A (erzeugt project_a.dll) -Project_B (erzeugt project_b.dll) und Project_B verweisen auf Project_A von NuGet-Paketen, und kopieren Sie dann project_a.dll, project_a.pdb in den Ordner Project_B / Packages. Tatsächlich sollte das in den / bin kopiert werden.

Debuggen Sie nun Project_A. Wenn der Code den Teil erreicht, an dem Sie beim Debuggen die Methode oder Ereignisse usw. der DLL aufrufen müssen, drücken Sie F11, um in den Code der DLL einzusteigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.