2017-01-31 5 views
2

Existe-t-il un moyen d'obtenir le numéro de ligne du code source dans le code C pendant l'exécution? L'idée derrière cela est, supposons qu'un logiciel est fait en langage C simple. le fichier .exe est distribué à un utilisateur qui ne sait rien sur C. Maintenant, s'il y a une erreur, l'utilisateur peut voir le numéro de ligne et signaler l'erreur au fabricant afin que le débogage peut être fait sur le site du fabricant. Je juste déboguer les erreurs d'exécution et obtenir les numéros de ligne correspondants dans le code source tout en l'exécutant. Je suis un débutant dans ces domaines.Existe-t-il un moyen d'obtenir le numéro de ligne du code source dans le code C lors de l'exécution?

+0

Ne suffit-il pas de compiler avec les symboles de débogage et d'exécuter du code dans un débogueur comme gdb? –

+0

C'est un dup qui répond à votre question spécifique. Mais comme indiqué par le premier commentaire, la meilleure façon de déboguer est d'utiliser un débogueur. – kaylum

+0

Je demande des numéros de ligne pendant l'exécution. Pourriez-vous s'il vous plaît expliquer? Je suis un débutant dans le codage –

Répondre

2

Utilisez plutôt gdb. Mais je suppose que cela fonctionnera:

if(someThingsWrong()) 
    printf("wrong at line number %d in file %s\n", __LINE__, __FILE__); 
3

Si vous utilisez le compilateur GCC, vous pouvez utiliser la macro prédéfinie standard - __LINE__ comme espace réservé de numéro de ligne.

Le compilateur remplira le numéro de ligne lors de la compilation.

Par exemple: -

printf("%d",__LINE__);

+1

La macro '__LINE__' n'est pas spécifique à GCC. –

2

Vous pouvez utiliser les macros intégrées __LINE__ et __FILE__, qui se dilatent toujours au nom du fichier en cours et le numéro de ligne.

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    if(argc<2) 
    { 
     printf("Error: invalid arguments (%s:%d)\n", __FILE__, __LINE__); 
     return 0; 
    } 
    printf("You said: %s\n", argv[1]); 
    return 0; 
} 
+1

'__FILE__' et' __LINE__' sont, avec d'autres, en fait des macros obligatoires. Voir C11 §6.10.8.1 1. –