codant actuellement sur Windows avec VS2005 (mais cela ne voudrait pas savoir s'il ya des options pour d'autres compilateurs et plates-formes. Je suis le plus intéressé par OSX comme une plate-forme alternative. J'ai un programme C (no c ++) et je "D Aiment faire ce qui suit ...
donné une fonction, dites ... p> J'aimerais mettre un extrait de code au point d'entrée et au point de sortie. Mais, je préférerais ne pas avoir à modifier les 100 des fonctions qui sont déjà là-bas. Existe-t-il un moyen de définir la saisie de fonction et la sortie du code que le compilateur s'injectera à toutes mes fonctions sans avoir à les modifier tous? P> La plupart des solutions que j'ai trouvées ou que j'ai essayées vous obligeront à éditer chaque fonction unique, qui fait beaucoup de travail. Je pense que quelqu'un d'autre a dû frapper quelque chose comme ça déjà et l'a résolu. Je ne peux pas être unique dans cette demande que je soupçonne. P> p>
4 Réponses :
Il est spécifique à Microsoft, mais vous pouvez accrocher à la Il y a un peu d'un tutoriel ici A >, et vous pouvez trouver quelques résultats supplémentaires sur la façon de les utiliser sur Google. En outre, Ce blog post passe en détail sur l'assemblage que vous devez faire pour éviter de jouer la pile sur l'entrée et la sortie. P> _penter < / code> et _pexit code> a > Fonctions Pour faire quelque chose lors de la saisie et de la sortie d'une fonction - vous devrez compiler votre projet avec des drapeaux spéciaux. P>
Je ne pense pas non plus - le _penter code> MSDN page liée ci-dessus affiche un exemple écrit en C avec un #include
Vous recherchez quelque chose appelé Programmation orientée verso ou AOP. p>
Ce n'est pas quelque chose qui est supporté de manière nativement en C (ou C ++). Certaines implémentations basées sur la bibliothèque sont énumérées sur la page liée pour C (bien que je ne sais pas à quel point ces derniers sont matures / utiles) P>
Cela nécessite probablement un compilateur / préprocesseur avant d'extrémité pour insérer le code d'aspect dans toutes les fonctions concernées.
@Loadmaster, probablement. Serait-ce si mauvais chose?
GCC a l'indicateur de fonctions -Finstrument qui vous permet de définir deux fonctions qui seront appelées au début et à la fin de chaque appel de la fonction:
void __cyg_profile_func_enter(void *this_fn, void *call_site); void __cyg_profile_func_exit(void *this_fn, void *call_site);
De même, -pg code> introduit un appel à mcount code> à l'entrée de toutes les fonctions, bien qu'il ne fournisse pas de crochet de sortie correspondant.
OpenWatCom Compilateurs C et C ++ a -ee et -e-PARAMETERS POUR CELA:
-en emit routine names in the code segment
Sauf si vous utilisez cela pour une forme de débogage ou de journalisation, cela me frappe comme une mauvaise idée.
Appuyé - dans la bonne chance, tout le monde codent toujours avec vs.