2016-12-21 2 views
0
TL:DR 

Pouvez-vous générer tintement des informations de débogage (GFR, PDGS) lorsque le fichier source d'origine des erreurs de DÉPENDANCE de fichiers manquants en-tête qui causent des problèmes de compilation telles que les identificateurs non déclarés et des types inconnus? Les fichiers sont syntaxiquement corrects. Y at-il un indicateur qui peut-être définir tous les identificateurs non déclarés à INTs pour le débogage? J'utilise Clang pour analyser les paquets de code source. En général, je modifie le makefile si clang génère des informations de débogage en utilisant la commande ci-dessousBypass erreurs C pour générer clang des informations de débogage

clang -emit-llvm -g -S -ferror-limit=0 -I somefile some_c_file 

Cependant, cette approche est très makefile ciblée et si développeur ne prend pas en charge Clang dans cette version de construction donnée, je dois comprendre comment générer les informations de débogage.

Ceci n'est pas bon pour l'automatisation. Pour des choses telles que OpenSSL où ils incluent une douzaine de fichiers (en-têtes) et des configurations personnalisées pour la plate-forme donnée, ce n'est pas pratique. Je veux supprimer ou ignorer les erreurs si possible, car je sais que le fichier de la version de compilation testé est syntaxiquement correct.

Merci!

+2

je ne pense pas qu'il soit possible. Pour générer le code, le compilateur a besoin d'informations situées dans des fichiers include. – Stargateur

+0

Peut-être que oui. Cependant, j'espérais que quelqu'un pourrait m'apprendre les ficelles du métier. Soit il y a un «tour du métier» quand il s'agit de la sécurité et de l'analyse des sources, ou il y a beaucoup de documents de sécurité qui sont complets de Bologne. –

+0

Notez que vous n'avez généralement pas besoin de patcher manuellement les fichiers makefiles - quelques variables d'environnement et, dans le pire des cas, les astuces PATH et les scripts nommés de manière appropriée peuvent aller très loin. Des trucs comme 'scanbuild' peuvent le plus souvent automatiser avec l'analyseur statique clang. Aussi, de nos jours, s'il est compilé dans gcc, vous pouvez généralement faire clang le compiler - souvent le pire dont vous avez besoin est juste quelques définitions pour faire croire que le code est gcc. Enfin, il existe des outils comme Psyché-c qui sont en cours de développement, mais ils sont encore très expérimentaux. –

Répondre

1

Récemment, j'ai utilisé clang-tidy pour l'analyse du code source d'un de nos projets. Le projet utilise le compilateur GNU et nous n'avons pas voulu nous en éloigner. Ainsi, le processus que j'ai suivi était inférieur à:

1) Utilisez ours pour générer la base de données de compilation -à-dire compile_commands.json qui est utilisé par clang-bien rangé

2) En passer l'inclure des fichiers que nous ne veut pas analyser par en les incluant dans les fichiers système ie utiliser --isystem pour son inclusion et la spécification de fichiers spécifiques en utilisant -I. (Si vous ne pouvez pas modifier les fichiers Make vous pouvez changer la compile_commands.json par une découverte simple et remplacer)

Hope this helps