Wie debugge ich eine externe Bibliothek (OpenCV) in Visual C ++?

8

Ich entwickle ein Projekt in VC ++ 2008. Das Projekt verwendet die OpenCV-Bibliothek (aber ich denke, das gilt für jede andere Bibliothek). Ich arbeite mit der Debug-Konfiguration, die Linker-Eigenschaften enthalten die Debug-Versionen der Bibliothek .libs als zusätzliche Abhängigkeiten. In VC ++ - Verzeichnissen unter Extras | Optionen richte ich das include-Verzeichnis, das .lib-Verzeichnis und die Quellverzeichnisse für die Bibliothek ein. Ich bekomme einen Fehler beim Aufruf einer der Funktionen aus der Bibliothek und ich möchte genau sehen, was diese Funktion macht. Die Zeile, die den Fehler erzeugt, ist:

%Vor%

Ich habe an dieser Zeile einen Haltepunkt eingerichtet, um zu sehen, wie die Funktion cvStereoCalibrate () fehlschlägt. Leider wird der Debugger den Quellcode für diese Funktion nicht anzeigen, wenn ich "Step into" drücke. Es springt sofort zur cvTermCriteria () (was eine einfache Inline-Makro-Kinda-Funktion ist) und zeigt dessen Inhalt an. Gibt es noch etwas, was ich tun muss, um die externen Bibliotheksfunktionen im Debugger eingeben zu können?

EDIT: Ich denke, dass die cvTermCriteria () - Funktion im Debugger angezeigt wird, da sie in einer Header-Datei definiert ist, daher sofort für das Projekt zugänglich.

EDIT2: Die PDB-Dateien für die Bibliotheksdateien fehlten, jetzt habe ich die OpenCV-Bibliothek in Visual C ++ in Debug-Konfiguration neu kompiliert, die PDB-Dateien vorhanden sind, aber immer noch für den Debugger irgendwie unsichtbar:

  

Geladen 'C: \ Benutzer \ DarekSz \ Dokumente \ Visual Studio 2008 \ Projekte \ libcci \ Debug \ ccisample.exe', Symbole geladen.
  'ccisample.exe': Geladen 'C: \ Windows \ SysWOW64 \ ntdll.dll'
  'ccisample.exe': Geladen 'C: \ Windows \ SysWOW64 \ kernel32.dll'
  'ccisample.exe': Geladen 'C: \ Windows \ SysWOW64 \ KernelBase.dll'
  'ccisample.exe': Geladen 'C: \ OpenCV2.1 \ bin \ cv210d.dll'
  'ccisample.exe': Geladen 'C: \ OpenCV2.1 \ bin \ cxcore210d.dll'

Die Symbole werden scheinbar nicht für die opencv dlls geladen. Die .pdb-Dateien befinden sich jedoch in dem Verzeichnis \ bin.

    
neuviemeporte 27.04.2010, 12:04
quelle

3 Antworten

12

Um die gesamte Aktivität in den Kommentaren zusammenzufassen: Der Schlüssel zur Lösung bestand darin, die Bibliothek in VC ++ neu zu erstellen, um die .pdb (Program Debug Database) -Dateien zum Debuggen zu erhalten, die vorkompilierten "-d" -Suffixbibliotheken nicht genug. Dennoch haben die Import-Bibliotheken für die Bibliotheksdlls das Programm dazu veranlasst, vorkompilierte DLLs aus der OpenCV-Paketstruktur zu laden, nicht die aus meinem Build mit den .pdb-Informationen (die Pfade waren ähnlich, so dass ich es zuerst nicht bemerkt habe). Der Pfad zu den PDB-Dateien wurde in Tools | Options bereitgestellt, aber diese Dateien wurden nicht geladen, da die Modulversion nicht übereinstimmte (offensichtlich). Nachdem ich die richtigen DLLs und ihre jeweiligen PDB-Dateien in das Anwendungsverzeichnis kopiert hatte, begann der Debugger innerhalb der Bibliotheksfunktionen zu arbeiten.

    
neuviemeporte 28.04.2010, 13:04
quelle
3

Bestätigen: Kompilieren Sie tatsächlich die OpenCV-Bibliothek aus der Quelle, oder verknüpfen Sie nur dagegen?

Ein paar Möglichkeiten kommen mir in den Sinn:

Es scheint, dass die Debug-Informationen für die OpenCV-Bibliothek nicht verfügbar sind (die PDB-Dateien). Möglicherweise müssen Sie PATH erweitern, um auf das Verzeichnis zu verweisen, das diese Dateien enthält. Es scheint mir, dass es eine Möglichkeit gibt, dies von VC ++ zu tun, aber ich bin ein paar Jahre davon entfernt, das Werkzeug zu benutzen ...

Ist cvStererCalibrate auch eine "Makrofunktion"? Wenn ja, finde heraus, auf welche reale Funktion es sich bezieht, und setze den Haltepunkt in der Bibliothek.

Schließlich, obwohl Sie es bereits gesagt haben, tut es nie weh, zurückzugehen und zu bestätigen, dass das vollständige Debugging für alles im Projekt aktiviert wurde, einschließlich externer Bibliotheken.

Ich weiß nicht, ob das hilft, aber es ist ein guter Anfang.

    
kmontgom 27.04.2010 12:15
quelle
2

Ich habe die gleichen Probleme, nämlich:

'ccisample.exe': Geladen 'C: \ OpenCV2.1 \ bin \ cv210d.dll'

'ccisample.exe': Geladen 'C: \ OpenCV2.1 \ bin \ cxcore210d.dll'

Ich habe es gelöst durch:

Linker - & gt; Eingabe - & gt; Zusätzliche Abhängigkeiten hinzufügen: 'cv210.lib; cxcore210.lib; highgui210.lib; '

anstatt hinzuzufügen: 'cv210d.lib; cxcore210d.lib; highgui210d.lib; '

    
John 15.11.2010 02:03
quelle

Tags und Links