
PC-Lint
Un outil d’analyse statique pour les programmes C/C++ qui trouve des bugs et des problèmes dans le code source. Il fonctionne sur Windows, DOS et OS/2 et est compatible avec tous les principaux compilateurs.
PC-Lint est un outil d’analyse statique pour les programmes C/C++ qui trouve des bugs et des problèmes dans le code source pour rendre les programmes plus fiables. Il fonctionne sur Windows, DOS et OS/2 et prend en charge ANSI C, K&R C et ANSI C++, en travaillant avec tous les principaux compilateurs. Il contient de nombreuses fonctionnalités telles que le suivi de précision, la vérification de type forte, la vérification d’initialisation et l’analyse de macro, et recherche les incohérences et les redondances entre les modules. Il fournit plus de 700 messages d’erreur avec un numéro d’erreur associé pour retracer une description plus détaillée de l’erreur.
Seule la version Workstation est disponible à l’achat via QBS Software.
PC-Lint – Fonctionnalités
Nouvelles fonctionnalités dans la version 9 Fonctionnalités dans la version 8
PC Lint est un vérificateur de code source pour les programmes C/C++ et fonctionne sur Windows, DOS et OS/2. PC-Lint examinera plusieurs modules (éventuellement des C et C++) et trouvera des bugs, des problèmes et des incohérences pour rendre les programmes plus fiables, plus maintenables et plus portables.
Nouvelles fonctionnalités dans la version 9
- Support multi-thread
- Types forts dimensionnels
- En-têtes précompilées
- Rapports d’utilisation de la pile
- Acquisition d’éléments de programme pour importation dans une base de données
- Suivi de variables statiques
Fonctionnalités dans la version 8
- Suivi des valeurs inter-fonctions : le suivi des valeurs entre les instructions a été étendu pour traverser les limites des fonctions. Les fonctions appelées avec des valeurs spécifiques sont ensuite traitées avec ces valeurs utilisées
Pour initialiser les paramètres, une opération multipass a été introduite pour tirer pleinement parti du suivi inter-fonctions, permettant à l’utilisateur de contrôler le nombre de passes.
- Documentation lisible par machine : accédez aux descriptions des messages en un seul clic de souris.
- Nouvelles mises en garde :
- pointeurs vers des zones insuffisamment grandes
- l’appel à malloc( strlen (s+1) )
- le new int(10)
- quand des pointeurs 64 bits rencontrent une arithmétique d’entiers 32 bits
- quand des paramètres de pointeur peuvent être des pointeurs vers const et quand des paramètres de référence peuvent être déclarés comme const
- quand une fonction membre peut être déclarée const
- copies superficielles de pointeurs membres dans les constructeurs de copie et les opérateurs d’affectation
- quand un test d’affectation n’est pas entouré de parenthèses
- séquences d’opérateurs non parenthésées confuses comme A/B*C
- retourner un temporaire via une référence
- une initialisation de référence qui peut entraîner un gain de capacité dangereux
- irrégularités d’exceptions
- cas où le dynamic_cast devrait être utilisé et où ce n’est pas approprié
- quand des littéraux de chaîne sont placés en danger via l’assignation à char *
- quand des espaces blancs peuvent intervenir entre un antislash et un saut de ligne créant une ambiguïté invisible
- comparaisons étranges qui ne peuvent pas réussir
- Nouvelles notes électives :
- utilisation de 0 lorsque NULL est prévu
- situations où const peut être ajouté aux paramètres, variables et pointeurs
- variables globales non const non volatiles, localiser celles-ci peut aider les applications multi-threaded à détecter des situations non réentrantes
- analyse approfondie des exceptions (pour les utilisateurs de C++)
- prototypes manquants de noms de paramètres
- conditions suspectes avec des problèmes d’ordre d’initialisation
- soustractions de pointeurs qui peuvent poser problème dans des conditions de mémoire maximale
- conditions qui peuvent entraîner des problèmes d’alignement
- Nouveau et
Options de révision d’intérêt
- Les améliorations sem incluent la capacité de spécifier que les pointeurs de retour des fonctions sont nouvellement alloués et que les arguments de pointeur des fonctions sont consommés (c’est-à-dire que la fonction prend en charge le pointeur)
- printf et scanf définis par l’utilisateur
- une hiérarchie de classes de fortune pour le code C
- meilleur support pour définir des commandes de prétraitement non standard
- meilleur support pour définir et manipuler les mots réservés.
- Autres options et fonctionnalités :
- support amélioré pour les éditeurs intelligents et les IDE avec des messages supplémentaires spéciaux lorsque un message donné contient des informations de localisation intérieure
- une analyse complète des exceptions C++ sans retenue
- une forme spécifique de commentaire de lint est requise lorsque le flux du programme passe d’un cas (non trivial) au suivant. (option -fallthrough)
- L’identifiant prédéfini lint contient maintenant des informations de version. Pour la version 8.00, il a une valeur de 800. support explicite pour un sous-ensemble de la norme MISRA (Motor Industry Software Reliability Association) ajouté.
- L’alignement est vérifié et peut être défini via une option -a similaire aux options -s pour définir les tailles
- Conformément à la norme, new (et new[]) ne renvoient pas NULL en cas de manque de mémoire mais lancent plutôt une exception (bad alloc)
- Prise en charge des systèmes compatibles Microsoft C/C++ : traitement .dsp, #import, et pragmas once et message
- Prise en charge de Gnu C/C++ se compose d’une option -cgnu, des arguments de macro variables et une forme d’assignation ‘testable’ que les utilisateurs non-Gnu peuvent utiliser
- Prise en charge de CodeGear C++ Builder incluant des noms de fichiers tronqués
- Amélioration continue du support pour les compilateurs de systèmes embarqués.
- Nouvelles options d’inhibition d’erreur :
- -e { # [,#] … } inhibe le(s) message(s)
# pour la prochaine déclaration ou instruction
- { # [,#]… } inhibe le(s) message(s) # à l’intérieur d’une région entre accolades
- -etemplate{ # [,#] … } inhibe
- +etemplate{ # [,#] … } réactive le(s) message(s) # tout en développant les modèles.
- Nouvelles options de verbosité :
- -v…c Émet un message de verbosité chaque fois qu’un appel de fonction unique est enregistré
- -v…d Indique si les modules sont traités comme du C ou du C++
- -v…h- Si le ‘h’ est suivi immédiatement d’un ‘-‘, alors la hiérarchie sera compressée produisant le même arbre en la moitié des lignes
- -v…t Indique quand un modèle est instancié
- -v…w Indique quand une fonction est parcourue avec des arguments spécifiques.
- Nouvelles options de drapeau :
- fdl a été amélioré pour permettre une différence de pointeur longue
- flm Format de message verrouillé
- fnn new peut retourner Null
- frl Informations de localisation de référence
- fsp Traitement d’appel de fonction spécifique
- fss Sous-structure permet aux structures C d’être liées comme dans l’héritage
- ftg désactive le traitement TRiGraph
- ftr Drapeau de troncature pour supporter les inclusions Borland.
- Nouvelles options de présentation de message :
- -append(#,string) peut être utilisé pour ajouter un message final (string) à un message d’erreur existant pour l’erreur #.
- Options supplémentaires :
- -background PC-lint/FlexeLint s’exécutera à une priorité réduite sous Windows NT
- -fallthrough Le flux de contrôle passe d’un cas switch à un autre
- -headerwarn{ nom du fichier [,nom du fichier]… } Peut être utilisé pour avertir l’utilisateur que le fichier d’en-tête spécifié est utilisé
- -ident1(string) Cette option permet à l’utilisateur de définir un identifiant d’un caractère
- +libdir Amélioré pour supporter des caractères génériques
- +l
- ibh Amélioré pour prendre en charge les caractères génériques
- +linebuf Cette option double la taille du tampon de ligne qui est initialement de 600 octets
- -passes{ k [,Options1 [,Options2] ] } Permet plusieurs passages sur l’ensemble des modules fournis en entrée
- -ppw asgn( mot1, mot2 ) Affecte la sémantique du préprocesseur associée à mot2 à mot1 et active mot1
- –ppw( mot1 [, mot2] … ) Supprime les idées préconçues sur la signification des mots du préprocesseur
- +pragma{ identifiant, une fois } Cette option permet au programmeur d’établir l’identifiant comme un code pragma pour indiquer que l’en-tête doit être inclus. +pragma{ identifiant, message } Cette option permet au programmeur d’établir un identifiant arbitraire comme un pragma qui produira un message sur la sortie standard
- -pragma{ identifiant } Cette option supprimera le pragma dont le nom est identifiant
- -printf code{ Code [, Type] } Cette option permet des codes printf définis par l’utilisateur
- –rw{ mot1 [, mot2] … } Supprime les idées préconçues sur ce que signifient les mots réservés potentiels et leur donne une signification par défaut (pour l’ignorer)
- -rw asgn( mot1, mot2 ) Cette option attribue la sémantique du mot réservé de mot2 à mot1
- -scanf code( Code [, Type] ) Cette option permet des codes scanf définis par l’utilisateur
- -sem Cette option a été améliorée pour prendre en charge un certain nombre de nouvelles sémantiques
- –u Cette option est similaire à -u sauf qu’un module à un niveau .lnt inférieur est ignoré
- Adaptation du compilateur:
- -cgnu Cette option est utilisée pour le compilateur Gnu
- to eol Cela ajoute à la suite de mots clés spéciaux qui permettent à Lint de passer sur des constructions inhabituelles non standard
- support de la fonctionnalité @ qui apparaît dans de nombreux compilateurs de systèmes embarqués.
- Directives du préprocesseur:
- #import prend en charge les Micros
Directive de préprocesseur oft du même nom
- #Directive de préprocesseur unassert annule les effets de #assert.
Prise en charge de la plateforme
- Microsoft Windows
- DOS (extendeur DOS intégré)
- OS/2 (32 bits).
Compatibilité:
- prend en charge K&R C, ANSI C, ANSI/ISO C++
- support explicite pour Borland, Microsoft, GNU et la plupart des autres compilateurs et bibliothèques majeurs
- prise en charge de la plupart des compilateurs de systèmes embarqués majeurs, y compris l’adressage bit
- nombreuses options pour prendre en charge les compilateurs non standard
- les tailles scalaires peuvent être spécifiées pour la compilation croisée.
Les fonctionnalités incluent:
- Suppression de message:
- par numéro
- par numéro et symbole (y compris les jokers)
- suppression d’une ligne
- par macro
- pour les en-têtes de bibliothèque par numéro (un en-tête est une bibliothèque en fonction de la manière dont il est inclus; cela peut être remplacé par des options utilisateur).
- Flexibilité:
- les fichiers indirects (imbriqués à n’importe quelle profondeur) peuvent contenir des noms de fichiers, des options, des variables d’environnement
- le format des messages d’erreur peut être personnalisé pour prendre en charge une grande variété d’éditeurs/EDI
- toutes les options peuvent être intégrées dans le code utilisateur.
- Installations de vérification spéciales:
- vérification de type B facultative (basée sur typedef) avec un ensemble d’options étendu pour détecter les différences de type nominal. Vous pouvez même former une hiérarchie de types scalaires entièrement vérifiée en utilisant uniquement typedef
- vérifie le flux de contrôle pour les variables potentiellement non initialisées
- suivi des valeurs pour détecter des problèmes subtils d’initialisation et de mauvaise utilisation de valeurs
- avec le suivi des valeurs en tant que technologie activante, il prend en charge la vérification de la ‘sémantique’ pour presque 100 fonctions de bibliothèque, cette vérification peut être étendue aux fonctions utilisateur (voir l’imitation de fonction)
- trouver les macros, typedef, classes, membres, déclarations, etc. inutilisés dans l’ensemble du projet (voir les définitions faibles)
- autres tests de torture spéciaux.
- opération rapide en une seule passe
- robuste – les tables s’étendront au besoin pour gérer de grandes applications.
PC-Lint – Configuration requise
Plateformes
- Windows Vista / XP / NT / 2000 / ME / 98 / 95
- MS-DOS (extendeur DOS intégré)
- OS/2
- #import prend en charge les Micros