Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1550 connectés 

  FORUM HardWare.fr
  Programmation
  C

  portée des variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

portée des variables

n°1977052
djobidjoba
Posté le 24-03-2010 à 23:26:19  profilanswer
 

bonjour, je voudrais savoir comment accéder aux variables locales d'une fonction depuis une autre.
Je développe une fonction de debug qui sort pour l'instant uniquement les lignes exécutées, ce qui me permet de tracer l'exécution.
je fais appel à ma fonction via une macro positionnée en début de chaque ligne avec en paramètre les constantes __file__ et __line__.
J'aimerais maintenant accéder depuis ma fonction de debug aux variables de la fonction que je suis entrain de tracer.
j'ai vu qu'il existait une constante __func__ qui donne le nom de la fonction en cours, n'est-il passe possible grâce à ce paramètre d'exporter les variables locales en mémoire  (la pile de __func__?-je ne maitrise pas trop le sujet) ?
j'ai trouvé cà http://stackoverflow.com/questions [...] guage-here mais il n'y a pas le C...

 

Message cité 1 fois
Message édité par djobidjoba le 25-03-2010 à 00:11:16
mood
Publicité
Posté le 24-03-2010 à 23:26:19  profilanswer
 

n°1977055
djobidjoba
Posté le 24-03-2010 à 23:38:11  profilanswer
 

un peu de code pour etre plus clair

Code :
  1. #include "stdio.h"
  2. #define f_DEBUG ma_func_debug(__FILE__,__LINE__,__func__);
  3. void ma_func_debug( char *s, int l, const char *f )
  4. {
  5. printf("%s/%d/%s\n", s, l, f );
  6. }
  7. int main( int arg, char **argv )
  8. {
  9. f_DEBUG;int i;
  10. f_DEBUG;for( i=0; i<5; i++ ) {
  11.  f_DEBUG;printf( "toto\n" );
  12. f_DEBUG;}
  13. f_DEBUG;return 0;
  14. }

donne :

D:\boulot>a.exe
test.c/12/main
test.c/14/main
test.c/15/main
toto
test.c/16/main
test.c/15/main
toto
test.c/16/main
test.c/15/main
toto
test.c/16/main
test.c/15/main
toto
test.c/16/main
test.c/15/main
toto
test.c/16/main
test.c/18/main


Message édité par djobidjoba le 24-03-2010 à 23:44:30
n°1977644
djobidjoba
Posté le 26-03-2010 à 09:44:22  profilanswer
 

une piste ?
j'ai trouvé quelque chose qui y ressemble ici http://www.dreamincode.net/code/snippet3323.htm
que représente les "100 bytes of code" de la ligne 38 ?


Message édité par djobidjoba le 26-03-2010 à 10:00:29
n°1977680
regexp42
Eplucheur de RFC.
Posté le 26-03-2010 à 11:12:00  profilanswer
 

djobidjoba a écrit :

bonjour, je voudrais savoir comment accéder aux variables locales d'une fonction depuis une autre.


 
C'est très très très moche de vouloir faire ça. Il faudrait se poser la question de comment tu as pu en arriver là. Mais bon, tu es grand et ça ne regarde que toi.
 
Il existe plusieurs tricks pour faire ça. Tu n'as pas précisé quelque chose, est-ce qu'il s'agit de variables "static", auquel cas tu sors régulièrement de ta fonction, ou alors de variables non "static" d'une fonction encore stacked ?
 
1 - Exemple de ce que je pense que tu voudrais faire avec une variable static :
 

Code :
  1. static void func(void)
  2. {
  3.     static int i = 0;
  4.     i++;
  5. }
  6. int main(void)
  7. {
  8.     func();
  9.     func()
  10.     /* Try to access func()'s "i" here. */
  11.     return 0;
  12. }


 
2 - Exemple de ce que je pense que tu voudrais faire avec une variable non static :
 

Code :
  1. static void func()
  2. {
  3.     /* Try to access main()'s "i" here. */
  4. }
  5. int main(void)
  6. {
  7.     int i = 42;
  8.     func();
  9.     return 0;
  10. }


 
Pour le cas 1, tu peux faire quelque chose d'assez simple, il te suffit de sortir "i" de ta fonction et de la foutre en globale.
 
Pour le cas 2, ça se complique, tu peux aussi mettre en globale les variables que tu voudrais mais ça sera surement pas la bonne solution vu qu'il peut y en avoir plusieurs.
 
Si ta fonction est toujours stackée, y'a rien qui t'empèche de chopper directement leurs adresses. Mais si tu ne veux pas faire d'assembleur il va te falloir au moins l'adresse d'une de tes variables.

n°2138074
djobidjoba
Posté le 21-04-2012 à 13:58:41  profilanswer
 

Pour la solution 1, je pourrais effectivement faire précéder les déclarations du mot clé statique. Comme l'idée c'est de faire ca en auto (passer le fichier source dans une moulinette) ca risque d'être tendu, il me faut recoder une analyseur syntaxique qui irait "détecter" les déclarations... c'est chaud je pense :o
donc solution 3 :
la fonction contenant mes variables à inspecter est bien toujours stackée lors de l'appel a la macro.
Quand tu dis "il va te falloir au moins l'adresse d'une de tes variables", est-ce que c'est sous entendu quand connaissant l'adresse d'une des variable d'une fct, on peut déterminer les autres ?  
en quoi l'assembleur pourrait m'être utile ?
merci et dsl pour le remontage de topique, j'étais passé sur un autre projet..  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  portée des variables

 

Sujets relatifs
Choisir entre une liste de variables ou un tableau[VBA] Boucle sur variables
sql-php Concaténation de variables, puis ré-utilisation séparéeBesoin d'aide : recupérer des variables d'une page à l'autre
[Résolu]Ouverture de fichiers et fonctions[RESOLU] Portée variables dans les classes ?
portée des variables[java] Vous préfixez vos variables pour en déterminer la portée?
[bash] question sur la portée des variables[PHP] Portée des variables (manuel trop vague!)
Plus de sujets relatifs à : portée des variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR