Comment puis-je savoir si un exécutable a été lié de manière incrémentielle ou non ?
-
11-09-2019 - |
Question
J'essaie d'utiliser Purify 6 pour analyser une corruption de mémoire dans l'un de nos exécutables construits avec VC++ 2003 (7.1).
Quand j'instrumente le binaire avec la commande :
purify /Replace=yes /Run=no myprog.exe
L'instrumentation s'arrête en me disant que l'exécutable était lié progressivement.Perplexe, j'ai vérifié les options de construction mais /INCREMENTAL:NO
était là.Pour être sûr, je l'ai reconstruit et l'option a été correctement passée au moment de la liaison.
Existe-t-il un moyen de savoir si un exécutable a été lié de manière incrémentale ou non ?
J'ai regardé quoi dumpbin /HEADERS
dit mais je n'ai rien vu de pertinent.
Merci.
La solution
Option 1:
c:...> dumpbin / résumé quel que soit.exe
Recherchez une section ".textbss".
Je ne suis pas sûr que ce soit fiable à 100 %, mais d'après mon expérience, l'éditeur de liens ajoute toujours cette section lors de la création de liens incrémentiels.
Option 2:
Recherchez un fichier ".ilk" à côté de l'exécutable.Visual Studio semble être efficace pour les nettoyer lorsqu'ils ne sont pas utilisés, donc la désactivation de la liaison et de la construction incrémentielles (pas même une "reconstruction") devrait les supprimer.
Option 3 :
Activez la journalisation de build (Outils/Options/Projets) et recherchez "/INCREMENTAL" ou "/INCREMENTAL:NO" dans le fichier buildlog.html qu'il génère.
Option 4 :
Analysez le fichier .vcproj.(ick!)