Pour obtenir une clé
d'essai remplissez le formulaire ci-dessous
Demandez des tariffs
Nouvelle licence
Renouvellement de licence
--Sélectionnez la devise--
* En cliquant sur ce bouton, vous acceptez notre politique de confidentialité

Free PVS-Studio license for Microsoft MVP specialists
To get the licence for your open-source project, please fill out this form
** En cliquant sur ce bouton, vous acceptez notre politique de confidentialité.

I am interested to try it on the platforms:
** En cliquant sur ce bouton, vous acceptez notre politique de confidentialité.

Votre message a été envoyé.

Nous vous répondrons à

Si vous n'avez toujours pas reçu de réponse, vérifiez votre dossier
Spam/Junk et cliquez sur le bouton "Not Spam".
De cette façon, vous ne manquerez la réponse de notre équipe.

On the good of automated filtering of i…

On the good of automated filtering of identical messages

14 Déc 2011

From the very beginning duplicates of messages in our analyzer PVS-Studio have been eliminated. For example, if a diagnostic message is generated for a code in an .h-file included into several .cpp-files, our tool will generate it only once. Some other analyzers don't do that and when they check .cpp-files, they show you messages every time on the same strings in .h-files. So it turns out that our analyzer generates fewer messages compared to such tools. But we had no chance to estimate how useful it is before. Now we've got such an occasion, and the results are really impressive.

To clarify the point let me first cite a code sample. Assume we have the Foo class defined in the Foo.h file:

class Foo {
  int iChilds[2];
  bool hasChilds() const { return(iChilds > 0 || iChilds > 0); }

There are two files Usage.cpp and Play.cpp, both containing the following string:

#include "Foo.h"

When checking these files, a message will be generated: "V501. There are identical sub-expressions to the left and to the right of the 'foo' operator". The message will be generated twice (because two compilation units have been checked), but the user will see it only once, since the repeated message will be automatically filtered.

If there were no filtration, you would see 2 V501 messages: one for the Usage.cpp file and another for the Play.cpp file.

We have recently checked the source code of Mozilla Firefox. Although Firefox's code is built with Visual C++, it still doesn't contain .sln-files and is compiled through makefile. It is this makefile we have built a call of the console version of PVS-Studio into for each file (as described in the documentation). The messages in this mode are written all in a row into one large "raw" report file that can be later opened with PVS-Studio from Visual Studio. Then this "raw" report can be saved as .plog (PVS-Studio's xml-report). During conversion repeated messages are automatically filtered.

So, there were about 2 000 000 messages (with numerous duplicates) in the "raw" report. In the converted report, there were only 80 000 messages, i.e. 25 times fewer. It is this number that enables us to estimate the amount of message duplicates which are automatically filtered.

This example also confirms the idea that a static analyzer is a complex system, and it's not enough just to print error messages into stdout.

Comments (0)

Next comments
Unicorn with delicious cookie
Nous utilisons des cookies pour améliorer votre expérience de navigation. En savoir plus