2009-07-28 9 views
2

Je ne trouve pas un moyen d'utiliser les outils de serveur source des outils de débogage pour Windows sur un projet de bibliothèque statique, qui est construit séparément des solutions utilisant réellement cette bibliothèque: La sortie de "ssindex.cmd" toujours affiche "zéro fichier source trouvé" pour le fichier PDB généré pour la bibliothèque (en utilisant les options du compilateur/ZI et/Fd). L'exécution de "srctool.exe -r" sur ce PDB n'affiche rien, ce qui signifie probablement que le fichier PDB ne contient aucune information de fichier source. L'exécution de la même commande sur le fichier PDB d'une application de test qui est également créée dans le cadre de la même solution fournit une liste de tous les fichiers source attendus.Le serveur source (outils de débogage pour Windows) peut-il être utilisé avec des projets de bibliothèque statiques?

Existe-t-il un moyen d'utiliser l'indexation de source pour un projet de bibliothèque statique lorsqu'il doit être construit séparément des solutions qui l'utilisent?

Merci pour vos suggestions!

Répondre

0

Cela signifie probablement que vous n'avez pas entré les bons répertoires lors de l'exécution de "ssindex" donc pour ssindex vous devez avoir:/source = C:/SourceCode// symboles = C:/SourceCode/bin/Debug Je suis pas sûr si la "source" a une majuscule S ou pas mais ça devrait être ça!

+0

Les problèmes de nom de chemin ne sont pas le problème dans mon cas. J'ai découvert ce qui suit en utilisant l'outil dia2dump de msdn: Pour la PDB d'un projet binaire (EXE ou DLL), la sortie de dia2dump contient une liste de fichiers source dans une section intitulée "Table trouvée: fichiers source". Avec un fichier PDB généré pour un projet de bibliothèque statique, la section correspondante semble toujours être vide. Donc, je suppose que c'est la raison pour laquelle "ssindex" ne fonctionne pas sur les projets de bibliothèque statiques. Mais je n'ai aucune idée pourquoi cette information n'est pas incluse dans le PDB et n'a trouvé aucun réglage de compilateur qui "guérit" ceci. –

3

Vous pouvez utiliser les options "/ Save" et "/ Load" pour stocker et charger des informations de source pour une bibliothèque statique, respectivement. L'utilisation de ces options vous permet de stocker des informations pour votre bibliothèque, puis de les importer ultérieurement lors de l'indexation d'un projet lié à votre bibliothèque. Lorsque vous indexez votre solution de bibliothèque, vous spécifiez l'indicateur "/ Save" avec un répertoire dans lequel stocker les informations d'index sur les fichiers source de la bibliothèque. Par exemple (en supposant que vous utilisez Subversion pour le contrôle de la source),

ssindex.cmd /System=SVN /Save=c:\source\libproj\srcinfo /Source=c:\source\libproj /Symbols=c:\source\libproj\Release\*.pdb 

Lors de l'indexation plus tard votre projet qui inclut votre bibliothèque, vous spécifiez le drapeau «/Load » avec le répertoire contenant les informations du fichier source de la bibliothèque. Par exemple,

ssindex.cmd /System=SVN /Load=c:\source\libproj\srcinfo /Source=c:\source\binproj /Symbols=c:\source\binproj\Release\*.pdb 

Deux problèmes potentiels peuvent affecter votre capacité à utiliser cette technique. Premièrement, il semble que certains fournisseurs de contrôle de source ne supportent pas l'enregistrement et le chargement des informations de contrôle de source. Je sais que le fournisseur Subversion le fait et il ressemble au fournisseur SourceSafe, mais je n'en ai pas vérifié d'autres. Deuxièmement, cette technique semble fonctionner uniquement pour une bibliothèque statique externe prête à l'emploi. Il ne semble pas y avoir un moyen de charger des informations à partir de plusieurs répertoires et les scripts écrasent actuellement le contenu du répertoire chaque fois que vous utilisez l'option "/ Save". Vous pouvez probablement modifier le module du fournisseur de contrôle source pour l'ajouter aux fichiers du répertoire d'enregistrement plutôt que de les remplacer, mais je ne l'ai pas essayé.

Notez également, comme vous l'avez mentionné ci-dessus, que vous n'avez besoin de le faire que si votre bibliothèque est construite dans le cadre d'une solution distincte. Si la bibliothèque statique fait partie de la solution que vous indexez, ses fichiers sources seront inclus s'ils se trouvent dans le chemin spécifié par l'option "/ Source".

0

lorsqu'il est exécuté svnindex.cmd, il vous dira toujours "zéro fichiers source trouvés"

après une Diggin douloureuse dans le svn.pm (le module Perl pour traiter svn), je trouve que:

  1. premier, svn.pm invoque "info svn R $ SourceRoot" pour obtenir toutes les informations de version de fichiers dans $ SourceRoot (adoptée par/option source),

  2. puis svn.pm stocke tous les fichiers dans un dictionnaire qui en utilisant le chemin de fichier local comme la clé

  3. svnindex.cmd appeler srctool -r pour obtenir toutes les informations des fichiers source dans * pdb, et utilisez le nom du fichier source comme clé pour interroger les informations sauvegardées à l'étape 2

le problème est:

svn.pm utilise un chemin relatif, mais * pdb utilise un chemin absolu, vous ne trouverez jamais une information du journal svn pour tout fichier, puis « fichiers source zéro trouvé »

fixup:

changement de ligne svn.pm 162:

$ FichierLocal = lc $ 1;

à

$ FichierLocal = $ SourceRoot. "\". lc $ 1; #make path absolu

Questions connexes