2013-02-18 13 views
7

Ich verwende einen CMAKE-Befehl, um PDB-Dateien zu installieren, um das Debuggen in einer Entwickler-Distribution meiner C++ - Anwendung zu ermöglichen. Der Befehl lautet wie folgt:PDB-Dateien mit cmake installieren

INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/Debug 
    DESTINATION bin 
    FILES_MATCHING 
    PATTERN *.pdb 
) 

Auch ich habe es geschafft, die entsprechende Quelle zu installieren verwendet, dass Entwickler Distribution zu bauen, in einem ‚src‘ -Ordner auf dem gleichen Niveau, so dass mein Top-Level-Looks Distributionsordner wie:

include\ 
src\ 
lib\ 
bin\ 
share\ 
doc\ 
3rdparty\ 
etc\ 

Meine Frage ist, wie kann ich die PDB-Dateien ‚wissen‘ lassen, wo die Quelle ist (ich davon aus, das erforderlich ist)? Gibt es einen CMAKE-Befehl, der dies erreichen kann? Schätzen Sie ein kleines Beispiel, wenn Sie es haben. Danke für Ihre Zeit und Interesse.

+1

Sie vielleicht einen Blick auf [diese Frage] nehmen wollen (http://stackoverflow.com/questions/27952/how-do-i-change-the-locations-of-source-files-in -a-symbols-Datei-pdb). – Angew

+0

Danke @Angew - Ich habe den Beitrag und die Beiträge von Links darin gelesen. Muss ich wirklich all dieses Symbol-Server-Geschäft durchlaufen? Ich denke, was ich frage ist: Gibt es eine kluge Möglichkeit, die PDBs und die passende Quelle so zu verpacken, dass ich nichts anderes tun muss (in Anlehnung an die erste Antwort). –

+1

Ich habe keine persönlichen Erfahrungen mit Off-Site-Debugging, aber der Eindruck, den ich von allen gelesen habe, die ich über das Verschieben von PDBs gelesen habe, ist, dass Sie "subst" verwenden oder den ursprünglichen Quellbaum exakt spiegeln müssen.Ich habe vor, dieses Thema aus Neugierde zu untersuchen; Leider, für ziemlich unklare Werte von * an einem Tag. * – Angew

Antwort

4

Meine Kommentare in eine Antwort umwandeln; basiert weitgehend auf Informationen aus dieser question und die Links dort.

PDB-Dateien speichern absolute Pfadnamen zu den Quelldateien. Wenn Sie keinen Symbolserver verwenden, können Sie die Umsetzbarkeit des Quellcodes nur mit dem Befehl subst sicherstellen.

Die Idee ist es, subst zu verwenden, um einen Laufwerkbuchstaben-Namen (z. B. N:\) für das Stammverzeichnis des Quellbaums zu erstellen. Dann machen Sie Ihre Builds von diesem Laufwerk, so dass absolute Pfade beginnend mit N:\ in die PDBs eingebettet werden. Wenn Sie später die ausführbare Datei auf einem anderen Computer debuggen müssen, verwenden Sie subst auf diesem Computer, um die gleichen absoluten Pfade zu den Quellen zu erhalten. Dadurch können die PDBs die Quelldateien finden.

Zum Beispiel, wenn Sie eine Datei C:\MySources\main.cpp haben, gehen Sie wie folgt vor:

subst N: C:\MySources 
N: 
run your build 

Später, lassen Sie uns sagen, dass Sie auf einer Maschine debuggen müssen, wo die gleiche Datei in D:\Devel\Other\main.cpp gespeichert ist. Tun Sie einfach subst N: D:\Devel\Other und arbeiten Sie dann von der N: Festplatte dort auch.

0

Die pdb-Datei speichert den Pfad zu den Dateien wie sie waren, als das Programm kompiliert wurde. Es gibt nichts, was Sie tun müssen, um sie wissen zu lassen, wo die Quelle war.

+0

Sind Sie sich sicher? Ich meine, wenn es ein absoluter Pfad ist, den die PDB-Datei speichert (absoluter Pfad zur Quelle), wie kann es dann feststellen, dass wenn ich auf einer anderen Entwickler-Workstation packe und schicke? Wenn es relativ ist, sollte ich dann sicherstellen, dass ich die Quelle an einem Ort installiere, der für den PDB "relativ" gleich ist wie beim Bau? Ich hoffe, ich mache Sinn. –

+0

Sie könnten dies immer testen ... Visual Studio (und WinDBG) sind beide intelligent genug, um sowohl den Speicherort von PDBs als auch den Quellcode abzubilden. VS sucht nach PDBs im selben Verzeichnis wie das geladene Modul (siehe auch die Registerkarte Module im Debugger). Sie können VS auch sagen, wo Sie über die Debug-Optionen nachsehen können. Wenn Sie auf einen Stapelaufruf klicken und sich die Quelle an einem anderen Ort befindet, werden Sie von VS aufgefordert, den Speicherort anzugeben. Dies funktioniert sogar für Crash-Dumps. Wie schlecht wäre das, wenn wir alle genau das gleiche Quellbaum-Layout hätten? –

1

Sie müssen nur Visual Studio, wo die Quelle ist zu informieren .. Es wird ein Datei-Browser-Dialog, zeigen Sie einfach auf die Quelle auf Ihrem lokalen Rechner, wenn die Pfade unterscheiden sich von, als es gebaut wurde.

4

ich nur answered meine eigene ähnliche Frage How to get cmake to install pdb files for targets. Verwenden Sie diese Installationsregel, um die pdb-Datei des Ziels (sofern vorhanden) in das Verzeichnis bin des Installationsverzeichnisses des Ziels zu kopieren.

install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL)