Un Hacker du Conte
La date est 12/02/10. Les jours avant Noël sont dégoulinants de suite et j'ai vraiment frappé un grand bloc de route en tant que programmeur informatique. J'ai été en utilisant AQTime, j'ai essayé de la somnolence, brillant, et très somnolent, et comme nous parlons, VTune est en cours d'installation. J'ai essayé d'utiliser le VS2008 profiler, et il a été positivement punir ainsi que souvent insensible. J'ai utilisé le hasard pause technique. J'ai examiné l'appel d'arbres. J'ai tiré la fonction trace. Mais le plus triste, douloureux, fait de la question est que l'application que je suis en train de travailler avec plus d'un million de lignes de code, avec probablement un autre million de lignes vaut la peine d'applications de tierce partie.
J'ai besoin de meilleurs outils. J'ai lu les autres sujets. J'ai essayé de chaque générateur de profils répertoriés dans chaque rubrique. Il n'y a tout simplement avoir quelque chose de mieux que ces junky et options dispendieuses, ou ridicule quantités de travail pour presque aucun gain. Pour compliquer les choses, notre code est fortement lié, et organise un certain nombre d'Événement de Qt boucles, dont certains sont tellement fragiles qu'elles écrasent sous la lourde instrumentation en raison de retards de synchronisation. Ne me demandez pas pourquoi nous sommes en cours d'exécution à des événements multiples boucles. Personne ne peut me dire.
Sont-il des options plus le long des lignes de Valgrind dans un environnement windows?
Est-il rien de mieux que le long couloir d'outils cassés, j'ai déjà essayé?
Est-il quelque chose conçu pour s'intégrer avec Qt, peut-être avec une durée d'affichage des événements dans la file d'attente?
Une liste complète des outils que j'ai essayé, avec ceux qui ont été vraiment utile en italique:
- AQTime: Plutôt bonne! A quelques difficultés avec la profondeur de récursivité, mais le graphe d'appel est correct dans ces cas, et peuvent être utilisés pour éliminer toute confusion que vous pourriez avoir. Pas un outil parfait, mais vaut la peine d'essayer. Il peut répondre à vos besoins, et, il a certainement été assez bon pour moi la plupart du temps.
-
Aléatoire Pause attaque en mode débogage: Pas assez d'informations suffisamment de temps.
Un bon outil mais pas une solution complète. - En parallèle Studios: L'option nucléaire. Discret, bizarre, et follement puissant. Je pense que vous devriez frapper les 30 jours d'évaluation, et de déterminer si c'est un bon ajustement. C'est juste sacrément cool, trop.
- AMD Codeanalyst: Merveilleux, facile à utiliser, très crash-couchée, mais je pense que c'est un environnement de chose. Je vous recommande de l'essayer, c'est gratuit.
- Luc Stackwalker: Fonctionne très bien sur les petits projets, c'est un peu essayer de le faire fonctionner sur la nôtre. Quelques bons résultats, et il remplace définitivement Endormie pour mes tâches personnelles.
- PurifyPlus: Pas de support pour windows-x64 environnements, le plus en évidence Windows 7. Par ailleurs excellent. Un certain nombre de mes collègues des autres départements, ne jurent que par elle.
- VS2008 Profiler: Produit une sortie dans les 100+concerts de gamme dans la fonction de mode trace à la résolution requise. Sur le côté positif, produit de solides résultats.
- GProf: Nécessite de la GCC pour être, même modérément efficace.
- VTune: VTune W7 soutien frontières pénale. Sinon excellent
- PIN: j'aurais besoin de pirater mon propre outil, donc c'est une sorte de dernier recours.
- Sleepy\VerySleepy: Utile pour les petites applications, mais à défaut de moi ici.
- EasyProfiler: Pas mal si vous n'avez pas l'esprit un peu de manuellement le code injecté pour indiquer où instrument.
- Valgrind: *nix seulement, mais très bon quand vous êtes dans cet environnement.
- OProfile: Linux uniquement.
- Proffy: Ils tirent les chevaux sauvages.
Suggéré des outils que je n'ai pas essayé:
- XPerf:
- Glowcode:
- Devpartner:
Notes: Environnement Intel pour le moment. VS2008, bibliothèques boost. Qt 4+. Et le misérable humdinger de tous: Qt/MFC intégration par trolltech.
Aujourd'hui: Près de deux semaines plus tard, il semble que mon problème est résolu. Grâce à une variété d'outils, y compris presque tout sur la liste et un couple de mes astuces, nous avons trouvé la primaire les goulets d'étranglement. Cependant, je vais continuer à le tester, explorer et d'essayer une nouvelle profileurs ainsi que les nouvelles technologies. Pourquoi? Parce que, je le dois à vous les gars, parce que vous les gars rock. Il peut ralentir le scénario un peu, mais je suis toujours très heureux de continuer à essayer de nouveaux outils.
Synopsis
Parmi beaucoup d'autres problèmes, un certain nombre de composants a récemment été mis sur le mauvais modèle de thread, causant de graves hang-ups en raison du fait que le code en dessous de nous est tout à coup plus multithread. Je ne peux pas en dire plus parce qu'il viole ma NDA, mais je peux vous dire que cela n'aurait jamais été trouvé par simple inspection ou même par rapport à la normale de la revue de code. Sans profileurs, callgraphs, et au hasard en s'arrêtant en parallèle, nous serions toujours à crier notre fureur à la belle bleue arc du ciel. Heureusement, je travaille avec certains des meilleurs hackers j'ai jamais rencontré, et j'ai accès à un incroyable verset plein de bons outils et des gens formidables.
Gentlefolk, je l'apprécie énormément, et le seul regret que je n'ai pas assez de rep pour récompenser chacun de vous avec un bounty. Je pense toujours que c'est une question importante pour obtenir une meilleure réponse que ceux que nous avons eu jusqu'à présent sur.
En conséquence, chaque semaine, pour les trois prochaines semaines, je vais mettre en place la plus grande générosité je peux me permettre, et l'attribution à la réponse avec les plus beaux outil que je pense n'est pas commun de connaissances. Après trois semaines, nous espérons avoir accumulé un profil définitif de la profileurs, si vous me pardonnez ma beaucoup les jeux de mots.
À emporter
Utiliser un profiler. Qu'ils sont assez bons pour Ritchie, Kernighan, Bentley, et Knuth. Je ne se soucie pas qui vous pensez que vous êtes. Utiliser un profiler. Si celui que vous avez reçu ne fonctionne pas, trouver un autre. Si vous ne pouvez pas en trouver un, code. Si vous ne pouvez pas le code de l'une, ou c'est un petit raccrocher, ou vous êtes juste coincé, l'utilisation aléatoire de la pause. Si tout le reste échoue, embaucher des étudiants diplômés pour bang un profiler.
Une Vision À Long Terme
Alors, j'ai pensé qu'il pourrait être agréable d'écrire un peu une rétrospective. J'ai opté pour un travail en profondeur avec la Parallèle Studios, en partie parce qu'il est en fait construit sur le dessus de la BROCHE de l'Outil. Ayant eu académique des relations avec certains des chercheurs impliqués, j'ai senti que c'était probablement une marque de qualité. Heureusement, j'ai droit. Alors que le GUI est un peu terrible, j'ai trouvé des adresses ip à être incroyablement utile, bien que je ne peux pas confortablement le recommande pour tout le monde. Critique, il n'y a pas de moyen évident pour obtenir la ligne de collision au niveau des comtes, quelque chose que l'AQT et un certain nombre d'autres profileurs de fournir, et je l'ai trouvé très utile pour l'examen des taux de la branche de sélection parmi d'autres choses. En net, j'ai apprécié l'aide AQTime ainsi, et j'ai trouvé leur soutien pour être vraiment réactif. Encore une fois, je me qualifier ma recommandation: beaucoup de leurs fonctionnalités ne fonctionnent pas bien, et certains d'entre eux sont carrément crash sujettes à Win7x64. XPerf également effectué de façon admirable, mais est atrocement lent pour l'échantillonnage de détail requis pour obtenir un bon lit sur certains types d'applications.
Maintenant, je dois dire que je ne pense pas qu'il y a une option définitive pour le profilage de code C++ dans un W7x64 de l'environnement, mais il y a certainement des options qui ne parviennent tout simplement pas à effectuer tout service utile.