none
gemeinsamer pdb-ordner RRS feed

  • Frage

  • folgendes szenario:

    benutzte umgebung: vs2010 sp1, win vista ultimate 32 bit

    wir haben vor, die pdb-dateien sämtlicher projekte in einem gemeinsamen ordner generieren zu lassen.

    es gibt hier ca. 40 projekte und noch mehr solutions (1x solution pro projekt und weitere "sammelsolutions", die mehrere projekte beinhalten). jedes projekt befindet sich also in verschiedenen solutions. beispiel:

    das projekt "MyButtonControl" befindet sich in den Solutions "MyButtonControl", "AllControls", "AllGui" und "All"

    in den projekteinstellungen steht nun bei "c/c++ -> OutputFiles -> Program Database File Name" folgendes: "$(OutDir)_pdb's\"

    das scheint ziemlich genau das zu ergeben, was wir wollen: alle pdbs der solution landen im gleiche ordner.

     

    ABER:

    neben meinen gewünschten pdbs wird noch für jedes projekt eine vc100.pdb generiert. das bedeutet leider:

    1. parallele builds (auf einem 4-kern-system meint vs, daß es 4x parallel builden kann) funktionieren nicht mehr, weil ständig irgendein buildprozeß jammert, nicht auf die vc100.pdb zugreifen zu können, sie wäre von einem anderen prozeß gesperrt. das kann man natürlich umgehen, indem man parallele builds verbietet - nicht fein, geht aber.

     

    2. jedesmal, wenn eine solution geladen wird, die ein projekt beinhaltet, das bereits aus einer anderen solution heraus gebaut wurde, funktioniert ein einfaches "build" nicht mehr. hier gibts dann die fehlermeldung:

    "vc100.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header"

    abhilfe schafft hier nur ein komplette rebuild der solution, was bei größeren projekten mindestens nervend ist.

     

    wie kann man die probleme hier umgehen? oder ist die idee, die pdbs so zu sammeln, generell keine gute?

     

    micha

     

     

     


    Dienstag, 29. März 2011 13:53

Antworten

  • Wenn Du schon ein Verzeichnis benutzt, dann musst Du auch die Compiler-Generated-PDB Datei einen entsprechenden eindeutigen Namen geben.

    - Öffne die Projekteinstellungen.
    - Wähle C/C++
    - Output Files

    In Program Database File Name steht normalerweise:
    $(IntDir)vc$(PlatformToolsetVersion).pdb

    Du solltest diese Datei IMHO einfach im IntDir lassen, oder eben evtl. den Namen abwandeln, dass er eindeutig ist.
    IMHO Ist diese Datei aber für das Debuggen unnötig, kann also im IntDir bleiben.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert suriel6666 Mittwoch, 30. März 2011 12:18
    Dienstag, 29. März 2011 20:38
    Moderator
  • du meinst, WENN ich schon die pdbs aller projekte gemeinsam in einem verzeichnis haben will, muß ich bspw. sowas in program database filename schreiben;

    $(OutDir)_pdb's\$(ProjectName)_vc$(PlatformToolsetVersion).pdb

    also etwas, das auch den projektnamen enthält? oder hab ich dich da falsch verstanden?

    So meinte ich es.
    Aber IMHO kanst Du die Datei auch im IntDir belassen und vergessen.

    wenn ich das tue, wird im "pdb's" ordner eine pdb erzeugt (projektname_vc100.pdb), im $(IntDir) wird aber außerdem eine projektname.pdb datei, mit anderer größe/inhalt erzeugt. hat das etwas zu bedeuten? (nicht, daß es mich stören würde, was im IntDir landet. ist nur aus interesse)

    Soweit ich weiß ist diese VC2000 pdb überhaupt nur bis zum Compile und Link Vorgang wichtig. Die finale PDB steht im OUTDIR. Dein Fehler war es vermutlich, auch diese Datei für "wertvoll" zu erachten.

    Und das ist auch ziemlich genau so dokumentiert
    http://msdn.microsoft.com/de-de/library/yd4f8bd1(VS.80).aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.
    Mittwoch, 30. März 2011 06:05
    Moderator

Alle Antworten

  • Wenn Du schon ein Verzeichnis benutzt, dann musst Du auch die Compiler-Generated-PDB Datei einen entsprechenden eindeutigen Namen geben.

    - Öffne die Projekteinstellungen.
    - Wähle C/C++
    - Output Files

    In Program Database File Name steht normalerweise:
    $(IntDir)vc$(PlatformToolsetVersion).pdb

    Du solltest diese Datei IMHO einfach im IntDir lassen, oder eben evtl. den Namen abwandeln, dass er eindeutig ist.
    IMHO Ist diese Datei aber für das Debuggen unnötig, kann also im IntDir bleiben.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert suriel6666 Mittwoch, 30. März 2011 12:18
    Dienstag, 29. März 2011 20:38
    Moderator
  • > Wenn Du schon ein Verzeichnis benutzt, dann musst Du auch die Compiler-Generated-PDB Datei

    > einen entsprechenden eindeutigen Namen geben.

     

    du meinst, WENN ich schon die pdbs aller projekte gemeinsam in einem verzeichnis haben will, muß ich bspw. sowas in program database filename schreiben;

    $(OutDir)_pdb's\$(ProjectName)_vc$(PlatformToolsetVersion).pdb

    also etwas, das auch den projektnamen enthält? oder hab ich dich da falsch verstanden?

    wenn ich das tue, wird im "pdb's" ordner eine pdb erzeugt (projektname_vc100.pdb), im $(IntDir) wird aber außerdem eine projektname.pdb datei, mit anderer größe/inhalt erzeugt. hat das etwas zu bedeuten? (nicht, daß es mich stören würde, was im IntDir landet. ist nur aus interesse)


    Dienstag, 29. März 2011 21:29
  • du meinst, WENN ich schon die pdbs aller projekte gemeinsam in einem verzeichnis haben will, muß ich bspw. sowas in program database filename schreiben;

    $(OutDir)_pdb's\$(ProjectName)_vc$(PlatformToolsetVersion).pdb

    also etwas, das auch den projektnamen enthält? oder hab ich dich da falsch verstanden?

    So meinte ich es.
    Aber IMHO kanst Du die Datei auch im IntDir belassen und vergessen.

    wenn ich das tue, wird im "pdb's" ordner eine pdb erzeugt (projektname_vc100.pdb), im $(IntDir) wird aber außerdem eine projektname.pdb datei, mit anderer größe/inhalt erzeugt. hat das etwas zu bedeuten? (nicht, daß es mich stören würde, was im IntDir landet. ist nur aus interesse)

    Soweit ich weiß ist diese VC2000 pdb überhaupt nur bis zum Compile und Link Vorgang wichtig. Die finale PDB steht im OUTDIR. Dein Fehler war es vermutlich, auch diese Datei für "wertvoll" zu erachten.

    Und das ist auch ziemlich genau so dokumentiert
    http://msdn.microsoft.com/de-de/library/yd4f8bd1(VS.80).aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.
    Mittwoch, 30. März 2011 06:05
    Moderator
  • mein fehler war wohl, daß ich übersehen habe, daß es tatsächlich 2x was mit pdbs einzustellen gibt:

    1. das oben erwähnte c/c++ -> output files -> Program database file name

    2. linker -> debugging -> generate program database file

     

    für alle projekte habe ich jetzt

    1. wieder zurückgesetzt auf den von dir erwähnten default

    2. auf "$(IntDir)..\_PDB\$(TargetName)_vc$(PlatformToolsetVersion).pdb"

    gesetzt, wodurch wohl das erreicht wird, was ich wollte: die pdbs aller projekte landen in einem gemeinsamen verzeichnis, die vc100.pdb bleibt im obj-verzeichnis der jeweiligen projekte

     

    danke für die hilfe

    Mittwoch, 30. März 2011 12:30