Wie kann man GCC anweisen, nach 5 Fehlern anzuhalten?

80

Ist es möglich, den GNU c ++ - Compiler anzuweisen, nach 5 gefundenen Fehlern anzuhalten? Kann dies nicht in der Dokumentation finden.

yegor256
quelle

Antworten:

93

Die Befehlszeilenoption weist den Compiler an, nach N aufzugeben-fmax-errors=N Fehlern . Diese Option ist in GCC 4.6 und höher verfügbar.

Die Befehlszeilenoption -Wfatal-errorsweist den Compiler an, nach einem Fehler aufzugeben . Diese Option ist in GCC 4.0 und höher verfügbar.

In beiden Fällen zählen Warnungen nicht zum Grenzwert, es sei denn, Sie geben dies ebenfalls an -Werror.

zwol
quelle
5
Ich würde diese +1 geben, aber für die Aussage über -Werror. Ich glaube, dass Warnungen unbedingt so behandelt werden sollten , als wären sie Fehler, da die meisten Warnungen ein Hinweis auf fehlerhaften Code sind.
Greyfade
3
@greyfade, ich denke auch, dass Warnungen im Allgemeinen als ein Muss behandelt werden sollten, aber leider können einige der Warnungen von gcc je nach Optimierungsstufe, Inhalt der Systemheader und einer Reihe anderer Dinge, die Sie nicht einfach steuern können, ausgelöst werden oder nicht . Auf diese Weise erhalten Sie möglicherweise alle Warnungen auf Ihren kanonischen Build-Plattformen, aber dann versucht ein armer Trottel, in einer exotischeren Umgebung zu bauen, und es explodiert.
zwol
2
@Zack, ist das nicht was -Wno-System-Header ist?
Sam Miller
2
Die Argumente, die ich gehört habe, um Variablen nicht zu initialisieren, für die der Compiler -Wuninitializedfalsch positive Ergebnisse erhält, sind: Es verschwendet I-Cache für tote, aber nicht nachweislich tote Speicheranweisungen; und wenn sich etwas ändert, das die Warnung wirklich positiv macht, wollen wir, dass Valgrind sie fängt.
zwol
3
Leider ehrt der Linker die -fmax-errorsFlagge nicht (ab arm-none-eabi-gcc 5.4.1). Ich habe die Option verwendet -finstrument-functionsund aufgrund der undefinierten __cyg_profile_func_enterFunktion Hunderte von Fehlern erhalten .
Lorcap
45

Sie können die Option gcc verwenden:

-fmax-errors=5

für diesen Zweck.

user1993934
quelle
Dies sollte ein Kommentar sein.
9
@Telthien Warum? Dies scheint mir eine Antwort zu sein.
13
@Telthien stackoverflow.com/questions/how-to-answer sagt, "jede Antwort, die den Fragesteller in die richtige Richtung bringt, ist hilfreich" und "Kürze ist akzeptabel". Antworten sollen eine Lösung bieten, die manchmal in einem einzigen Satz erreicht werden kann.
Wenn es so kurz ist, gibt es keinen Grund, die Antwort zu verlängern. Vor allem nicht, um überlang zu sein oder um etwas zu bitten.
n611x007
1
Vielen Dank, dass Sie mich darauf aufmerksam gemacht haben, dass seit dem Schreiben meiner Antwort eine neue Funktion hinzugefügt wurde.
zwol
5

Ich würde eine solche Option ebenfalls begrüßen. Im Moment verwende ich die folgende Problemumgehung, um die ersten fünf Fehler zu erhalten:

<make> 2>&1|grep error|head -5
Tomasz Romanowski
quelle
1

Ich muss fragen, warum Sie das tun möchten. Manchmal ist der im Code vorhandene Fehler nicht der erste oder sogar in den ersten fünf Fehlern gefundene. Manchmal ist es darüber hinaus und erst erkennbar, wenn Sie in der Liste nach unten scrollen. Eine bessere Methode könnte darin bestehen, Ihren Code aufzubrechen und in kleinere Bibliotheken zu stellen, wenn Sie Probleme mit den Kompilierungszeiten haben. Oder wenn Sie Probleme haben, wenn Sie vom Bildschirm einer Befehlszeile scrollen, verwenden Sie den Operator '>>', um die Nachrichten in eine Datei zu leiten.

Wheaties
quelle
1
Es ist nur eine Frage der Lesbarkeit des Fehlerprotokolls. 5 Fehler sind mehr als genug, um das Problem zu verstehen, zumindest in meinem Fall :)
yegor256
14
"Ja wirklich?" Meine Erfahrung war genau das Gegenteil - insbesondere in C ++, es sei denn, ich mache bestimmte Arten von Refactoring-Arbeiten, die viele diskrete Fehler verursachen (z. B. Ändern der Argumente in eine häufig verwendete Methode). Der allererste Fehler ist wahrscheinlich der einzige, der überhaupt etwas nützt.
zwol
@ FaZend.com Ich verstehe, es tut mir leid, dass ich damals keine Antwort gegeben habe. Die folgende Antwort von Zack ist wahrscheinlich die beste, die Sie erreichen werden, es sei denn, Sie schreiben ein kleines Skript, um diesen Fehler zu analysieren und den Prozess zu beenden, nachdem 5 Fehler ausgegeben wurden. (obwohl ich in dieser Aussage ziemlich unwissend sein könnte.)
Wheaties
1
Die Leute scheinen sich in dieser Frage nur sehr begrenzt vorzustellen. Was ist mit diesem Szenario? Sie haben gerade zum ersten Mal ein Programm in eine neue Umgebung portiert. Sie erhalten einige Fehler und die Kompilierung wird abgebrochen. Sie haben keine Ahnung, wie viele Inkompatibilitäten zwischen der alten und der neuen Umgebung bestehen. Was Sie wissen möchten, ist, wie schlimm die Situation ist und wie viele Probleme Ihr Code enthält. Sie möchten alle Fehler in einer großen Liste zusammenfassen, damit Sie abschätzen können, wie lange Sie brauchen, um sie alle zu beheben.
Phill Apley
4
@PhillApley Das Problem dabei ist, dass ein einzelner Fehler häufig eine Kaskade von Flow-On-Fehlern auslöst (einige mit Tonnen von STL-Vorschlägen). Wenn Sie also nach der Menge der Fehler und Warnungen urteilen, können Sie den erforderlichen Aufwand überschätzen und geben oben.
Evgeni Sergeev