Compiling

如何限制編譯 C++ 程序後顯示的錯誤消息的數量?

  • March 26, 2018

我正在編譯一個 C++ 程序,g++每次都會出現大量錯誤,這迫使我每次想查看第一個(也是最相關的)錯誤時都向上滾動。我想知道在編譯程序時是否有一個選項可以限制終端中顯示的錯誤消息的數量。

您可以使用選項-fmax-errors=1將錯誤數設置為 1,依此類推。預設 0 是無限的。gccg++選項適用於.

你有幾個選擇:

  • 在編譯器完全放棄之前,使用編譯器選項設置錯誤消息數量的限制,如另一個答案。
  • 使用head,記住錯誤消息當然會發送到標準錯誤。或者使用圍繞該後處理 GCC 輸出浮動的*眾多工具之一。*還要記住,對於採用 clang 模型的現代版本的 GCC,一個錯誤可以跨越多行,因此低行數head可能根本沒有多大用處。
  • 使用分頁符,例如pager, pg,moreless, 再次記住錯誤消息被發送到標準錯誤
  • :terminal在 NeoVIM中執行編譯命令,它提供了相當多的回滾,當然還有所有常用的 VIM 導航鍵序列,用於快速轉到輸出頂部和搜尋。
  • 與您的文本編輯器集成。

後者是最有趣的選擇。它至少有兩種口味:

  • 將編譯器的標準輸出+標準錯誤寫入文件,並告訴您的文本編輯器將其視為錯誤文件。使用 Vim 和 NeoVIM 可以做到這一點
vim -q 錯誤文件

nvim -q 錯誤文件

當然,您可以在其中替換您選擇的名稱errors_file。這將打開文本編輯器,並將錯誤文件載入到 quickfix 緩衝區中,並打開第一個錯誤或警告消息的文件並定位在該錯誤的行號(和列)處。

  • 從一個人的文本編輯器中執行編譯器。使用 Vim 和 NeoVIM,如果有一個 makefile,可以使用:make命令呼叫它,VIM/NeoVIM 會將執行時的錯誤輸出make放入 quickfix 列表,再次自動定位到第一個錯誤或警告的文件、行和列資訊。

有了這兩個,當然可以從一個警告/錯誤的位置移動到下一個使用:cnext和其他各種 Vim/NeoVIM 快速修復列表導航命令的位置:help :cc。請注意,這些機制沒有理由限制錯誤的數量,並且有 Vim/NeoVIM 命令可以返回到目前消息的位置,或者返回到第一條消息的位置。

特別是後者,您還可以執行:make多次,並使用:colder和在較舊和較新的錯誤列表之間來回切換:cnewer。(您可以另外更改:make以執行除make, using之外set makeprg的其他內容,更多內容請參見 VIM/NeoVIM 手冊。)

可以用 emacs 做類似的事情。

引用自:https://unix.stackexchange.com/questions/433503