2010-10-05 37 views
6

Disons que j'ai un projet avec une douzaine de modules différents qui produisent une DLL résultante, comment puis-je l'analyser afin que je puisse identifier la taille réelle du fichier chaque module/fonction contribue-t-il? Je sais que cela pourrait être impossible avec une version Release où beaucoup d'informations ont été effacées, mais qu'en est-il si j'ai la source complète et que je peux faire une version Debug?Analyser les fichiers .exe/.dll (Windows PE) pour le code bloats

De même, s'il y a de grandes variables statiques définies quelque part, y a-t-il un moyen de les localiser facilement?

Question supplémentaire: Que diriez-vous des fichiers ELF Linux?

+0

dumpbin devrait à mon avis vous montrer gros global/statique. – valdo

+0

@valdo des détails sur la façon de le faire? J'ai exploré un peu et n'arrivais pas à comprendre. – kizzx2

Répondre

4

Chaque fois que j'ai été impliqué dans l'identification du ballonnement, je commence généralement par dumpbin sous Windows. Habituellement, en écrivant un outil pour examiner chaque module d'objet via dumpbin puis analyser la sortie. Cela a tendance à être un processus itératif et peut prendre beaucoup de temps. Pour les versions de débogage avec PDB Sizer peut produire des rapports utiles.

Adrian a quelques conseils utiles ici. Minimizing Code Bloat for Faster Builds and Smaller Executables et un outil appelé SymbolSort pour aider. La source en C# est incluse avec SymbolSort, ce qui peut être un bon début si SymbolSort ne vous aide pas. Pour ELF, la sortie nm et objdump constitue un bon point de départ.

+0

C'est absolument fantastique! Ils ont cette politique stupide de 24 heures pour la prime: P – kizzx2

+0

Juste jeté un coup d'oeil à 'nm -S'. Quel problème simple qui est si obscur à résoudre sous Windows: P – kizzx2