2010-11-26 10 views
0

J'ai écrit un programme en c et j'essaye de créer un fichier journal. Le problème auquel je suis confronté est que lors de l'impression des sorties de chaque ligne dans le fichier, je veux écrire une caractéristique distinctive telle que l'heure d'exécution de cette ligne ou même le numéro de ligne dans le code.Débogage en c pour le fichier journal

Y at-il un moyen que je peux apprendre à connaître l'un de ces deux.

Cela ne me dérange pas si vous proposez une autre façon d'obtenir une caractéristique distinctive. Tout ce que je veux, c'est qu'en regardant le fichier journal, l'utilisateur sache qu'une certaine partie du code était en cours d'exécution.

Merci


Je travaille sur linux et donc en utilisant le compilateur GCC ....

j'ai fait un fichier d'en-tête et il je suis à des fins de test d'écriture __LINE__. Qu'est-ce que je veux faire est que dans un programme lorsque j'inclue cette fonction de fichier d'en-tête le numéro de ligne est imprimé où la fonction est. Mais à la place, j'obtiens le numéro de ligne de l'instruction printf du fichier d'en-tête.

Que dois-je faire pour obtenir le numéro de ligne du fichier. Ceci est juste un format de test donné ci-dessous: -

new.h 
     void print() 
     { 
      printf("Line number is %d",__LINE__); 
     } 

actual file 
     #include "new.h" 
     int main() 
     { 
      print(); 
     } 

Ensuite, je veux que le numéro de la ligne qui doit être imprimé est celle du fichier réel et non new.h ce qui arrive maintenant ....

Répondre

2

La plupart des compilateurs C fournissent des macros pour identifier chaque ligne, fonction, etc. Avec GCC, par exemple, vous pouvez utiliser __LINE__, __FUNCTION__, et ainsi de suite. Vérifiez la documentation de votre compilateur pour plus de détails. Pour obtenir un horodatage, vous devez nous indiquer le système sur lequel vous travaillez.

+0

Hey pouvez-vous aider un peu plus .... J'ai un fichier d'en-tête dans lequel j'imprime les numéros de ligne. Mais le problème que je reçois est que je veux imprimer les numéros de ligne d'autres fichiers que je cours. Comment faire ceci .... –

+0

Écrivez une macro pour ceci. par exemple. #define print() printf ("Numéro de ligne est% d", __ LINE__) – JustSid

+0

Je pense que je devrai écrire cela dans le fichier mais je ne le veux pas. Comme dans je veux que si quelqu'un exécute mon programme il obtient les valeurs du numéro de ligne imprimé et qu'il n'a pas à inclure la macro lui-même .... Merci beaucoup ... –

2

Si vous voulez connaître la date et l'heure auxquelles la fonction a été exécutée, essayez asctime(). Il y a une bonne référence sur la façon dont c'est fait .

Ceci affichera quelque chose de semblable à Sat May 20 17:36:17 2000. Si vous voulez le temps en secondes depuis le début du programme, ayez une variable telle que int startTime = time() qui contient l'heure de début du programme en secondes de l'Epoque Unix. Ensuite, imprimez simplement startTime - time() pour obtenir le nombre de secondes écoulées depuis le démarrage du programme.

+0

Hey ... mais je pense que pour un but de journalisation, ce n'est pas utile car mon programme lui-même se termine en quelques secondes. Donc, il n'y aurait aucun moyen de faire la différence quel code a été exécuté en premier .... S'il vous plaît corriger si faux :) –

+0

Si vous utilisiez SDL, vous pourriez obtenir le temps en millisecondes en utilisant 'SDL_GetTicks()', mais je doutez que vous l'utilisiez en raison de l'absence de mention. Désolé, je ne peux pas être plus utile! Aussi, pour les autres affiches-réponses, merci pour les mots-clés __FILE__ et __LINE__, si utiles! – Bojangles

+0

Pas un problème! La communauté SO est toujours là pour vous aider! – Bojangles

0

Utilisez __FILE__ et __LINE__ pour obtenir le fichier en cours et numéro de ligne.

Modifier: basé sur votre question éditée. Voici un moyen simple de le faire pour commencer.

new.h

#define PRINT() print(__LINE__) 

void print(int line) 
{ 
    printf("Line number is %d",line); 
} 

réel du fichier

#include "new.h" 
    int main() 
    { 
     PRINT(); 
    } 
+0

Hey pouvez-vous aider un peu plus .. .. J'ai un fichier d'en-tête dans lequel j'imprime les numéros de ligne. Mais le problème que je reçois est que je veux imprimer les numéros de ligne d'autres fichiers que je cours. Comment faire ceci .... –

+0

Utilisez #define pour faire des macros qui utilisent '__LINE__'. Le '__LINE__' sera la ligne dans le .c, pas le .h. Si vous utilisez '__LINE__' à l'intérieur de la fonction dans un .h, alors ce sera la ligne # dans le .h. Si je suis malentendu, code postal. –

+0

Pouvez-vous dire n'importe quel moyen de mise en œuvre pour l'édition que j'ai fait .... Merci beaucoup .... –

0

Dans GCC, vous pouvez obtenir le numéro de ligne "__LINE__". Nom de fichier - "__FILE__".

Si vous voulez calculer le temps d'exécution alors souvenez-vous du temps au démarrage, obtenir du temps sur la fin et les soustrayez.

0

Le numéro de ligne peut être obtenu par la macro du préprocesseur __LINE__. Le fichier est __FILE__. En ce qui concerne le temps, utilisez la bibliothèque de système d'exploitation pertinente.

Ou utilisez une bibliothèque de journalisation prenant en charge ces éléments.

Questions connexes