2017-02-17 4 views
1

Nous l'avons tous entendu - "essayez une construction propre et voyez si cela fonctionne". Souvent, les erreurs d'exécution étranges disparaissent après une reconstruction. Cela m'a fait réfléchir - correctement les dépendances de suivi est le travail d'un système de construction.Les erreurs d'exécution qui disparaissent lors de la reconstruction indiquent-elles des bogues dans le système de construction?

Est-ce que ces erreurs d'exécution par définition bogues dans un système de construction - que ce soit make, ou msbuild, ou n'importe quel. Ou en d'autres termes, si une construction propre et une construction normale donnent des résultats différents, est-ce par définition un bug dans le système de construction?

Edit: Je suppose the build environment is sane - ce qui signifie que lorsque les fichiers sont mis à jour, leur horodatage « Dernière modification » devient plus récent (au lieu d'un horodatage plus ou le même). En fait, tous les systèmes de contrôle de version que je connais respectent cette règle, car sinon, ils briseraient les systèmes de construction comme Make, qui dépendent des horodatages pour suivre quels fichiers doivent être mis à jour.

+0

Disons qu'il y a un problème m avec votre système. Le problème est résolu en annulant l'un des modules sources. Vous faites une construction régulière. Il voit que l'horodatage du module compilé est après l'horodatage du module source, donc il ne recompile pas ce module. Vous exécutez le système construit et il a toujours le problème. Vous exécutez une construction propre et chaque module est construit. Maintenant, le problème est résolu. –

+0

Git définit l'horodatage à l'heure actuelle lors du remplacement d'un fichier, en particulier pour résoudre ce problème. Je pense que tous les systèmes de contrôle de version le font de cette façon. http://stackoverflow.com/a/2179876/492336 – sashoalm

+0

Je ne fais que décrire un scénario qui m'est arrivé. –

Répondre

1

Les systèmes de construction peuvent être optimisés en termes de performances ou d'exhaustivité. Reconstruire tout est une compilation de complétude.

La raison pour laquelle une reconstruction partielle échoue est

  • connaissances incorrectes. Une bibliothèque est construite, mais un système de construction fragmenté ne comprend pas les dépendances de l'ensemble.
  • dépendances manquantes. Bien que les dépendances directes de l'en-tête au code c soient comprises, les dépendances indirectes sont manquées.
  • modifiez et continuez la compilation erronée. La construction partielle comprend les conséquences d'un changement de code, et ne recompile pas assez.

Toutes ces erreurs sont compensés par les avantages

  • plus simple pour maintenir rendre les fichiers
  • plus rapide compiles
  • plus rapide tour bogue autour

Vous devez faire votre propre jugement où se trouve la valeur

+0

Une autre possibilité - un artefact a été partiellement construit dans le cadre d'une tentative de construction précédente, et est maintenant dans un état incomplet. Si les dépendances de cet artefact ne sont pas mises à jour, le système de construction ne sait pas que l'artefact doit être reconstruit. – Stobor