Forum: Projekte & Code Noizu - A GCC/Clang warnings formatter


von Vincent H. (vinci)


Lesenswert?

Grüß euch

Ich hab heut ein kleines Python Tool namens "Noizu" geschrieben mit 
dessen Hilfe sich der stderr Output von GCC und Clang nach Pfaden und 
Dateinahmen filtern lässt. Das ist insbesondere dann hilfreich wenn man 
so Dinge wie die CMSIS/DSP Bibliothek einbindet, die allein weit über 
2000 Warnings generiert...

Um einen entsprechenden Output von seinem Compiler zu erhalten bietet es 
sich an stderr beim Compilieren in ein File umzulenken. Das funktioniert 
beispielsweise so:
1
make 2> log

Jenen Log kann man dann an Noizu schicken und nach Keywords filtern 
lassen. Im Fall von CMSIS also etwa:
1
python noizu.py log -e CMSIS/DSP

Bzw. wahlweise in eine neue Datei hinein:
1
python noizu.py log -e CMSIS/DSP -o output_log


Und hier noch ein vorher/nacher Vergleich um zu veranschaulichen wie 
viele Warnings man sich alleim im Fall CMSIS + STM32 HAL reinzieht:
1
-Wsign-conversion                                                 2403
2
-Wconversion                                                      324
3
-Wpedantic                                                        16
4
-Wunused                                                          7
5
-Wunused-parameter                                                6
6
-Wsign-compare                                                    4
7
-Wstrict-aliasing                                                 3
8
-Wattributes                                                      2
9
-Wshadow                                                          1
10
-Wunused-variable                                                 1

Gefiltered nach CMSIS und HAL. Jene Warnings stammen aus von mir 
eingefügtem Code:
1
-Wunused                                                          2
2
-Wunused-parameter                                                1
3
-Wsign-compare                                                    1
4
-Wstrict-aliasing                                                 1
5
-Wshadow                                                          1
6
-Wunused-variable                                                 1

Das Projekt inklusive CMSIS + HAL Beispiel gibts hier:
https://gitlab.com/higaski/Noizu

: Bearbeitet durch User
von asf44 (Gast)


Lesenswert?

Hm könnte mal hilfreich sein. In dem Fall sollte ST aber mal ihre libs 
fixen.

Habe letztens die ASF4 auf Vordermann gebracht:
Mit -Wall -Wextra -Werror musste ich ~7 mal unused attribute hinzufügen.

von Vincent H. (vinci)


Lesenswert?

Ich glaub ein Großteil der oben augezählten Warnings stammt eher aus der 
CMSIS/DSP, aber ja, ganz unschuldig ist ST auch nicht.

Grad in externem Code nichts ändern zu müssen war einer der Gründe 
weshalb ich lieber den stderr Output geparsed hab. ;)

von Testikus (Gast)


Lesenswert?

Vincent H. schrieb:
> Ich hab heut ein kleines Python Tool namens "Noizu" geschrieben mit
> dessen Hilfe sich der stderr Output von GCC und Clang nach Pfaden und
> Dateinahmen filtern lässt.

Ist das nicht eigentlich Aufgabe der IDE?

Siehe z. B. Visual Studio: hier werden Warnungen und Fehler nach 
Error-Code, Beschreibung, Projekt, Datei, Zeile etc. sortier- und 
filterbar angezeigt.

von Wilhelm M. (wimalopaan)


Lesenswert?

Vincent H. schrieb:
> Grüß euch
>
> Ich hab heut ein kleines Python Tool namens "Noizu" geschrieben mit
> dessen Hilfe sich der stderr Output von GCC und Clang nach Pfaden und
> Dateinahmen filtern lässt. Das ist insbesondere dann hilfreich wenn man
> so Dinge wie die CMSIS/DSP Bibliothek einbindet, die allein weit über
> 2000 Warnings generiert...

Dein Ansatz ist natürlich allgemeiner, wenn es jedoch nur um das 
Unterdrücken geht, so hätte ich die Option -isystem statt -I für die 
Inklusionspfade verwendet.
Oder mit diagnostics push/pop gearbeitet.

von Vincent H. (vinci)


Lesenswert?

Testikus schrieb:
> Ist das nicht eigentlich Aufgabe der IDE?
>
> Siehe z. B. Visual Studio: hier werden Warnungen und Fehler nach
> Error-Code, Beschreibung, Projekt, Datei, Zeile etc. sortier- und
> filterbar angezeigt.

Ich nutze Visual Studio nicht und nehme an, dass diese Funktion nur für 
MSVC zur Verfügung steht.


Wilhelm M. schrieb:
> Dein Ansatz ist natürlich allgemeiner, wenn es jedoch nur um das
> Unterdrücken geht, so hätte ich die Option -isystem statt -I für die
> Inklusionspfade verwendet.
> Oder mit diagnostics push/pop gearbeitet.

Push/pop heißt Sourcen angreifen. Und -isystem find ich für fremde 
Applikationsbibliotheken auch eher unschön.



Erfreulicherweise wird Noizu trotzdem recht bald wieder in die Pension 
geschickt, da GCC9 JSON output mitbringen wird:
https://developers.redhat.com/blog/2019/03/08/usability-improvements-in-gcc-9/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.