簡體   English   中英

有什么方法可以在命令行中獲取可讀的 gcc 錯誤和警告 output?

[英]Is there any way to get readable gcc error and warning output at the command line?

對於一些較長的錯誤,gcc output 很密集,並且有很多換行等。特別是當錯誤很細微時,我可能需要 10-30 秒的眯眼才能用我的眼睛解析它。

我已將其粘貼到開放代碼編輯器 window 中,以獲取一些基本的語法突出顯示並啟用正則表達式重新格式化。

有沒有人發明了一種更自動化的方法?

我使用這個腳本,稱為colorize

#!/bin/bash
while read x ; do echo $x ; done \
| sed -e "s/.*error:.*/\x1b[1;36m&\x1b[0m/" \
-e "s/.*warning:.*/\x1b[1;36m&\x1b[0m/" \
-e "s/^\(.*\)\(required from\)/\x1b[1;36m\1\x1b[0mnote: \2/" \
-e "s/^\(.*\)\(In instantiation of\)/\x1b[1;36m\1\x1b[0mnote: \2/" \
-e "s/^\(.*\)\(In member\)/\x1b[1;36m\1\x1b[0mnote: \2/" \
| sed -e "s/error:/\x1b[1;31m&\x1b[1;36m/" \
-e "s/warning:/\x1b[1;35m&\x1b[1;36m/" \
-e "s/note:/\x1b[1;30m&\x1b[0m/"

然后我就這樣稱呼它(使用 make 或任何構建系統):

make |& colorize

我得到類似於 clang 的顏色 output。

我發現colorgcc是無價的。 通過引入着色,在精神上解析 gcc 錯誤消息的文本變得更加容易,尤其是在涉及模板時。

如果您的錯誤與模板相關,請查看 STLfilt:

gccfilter 對消息進行着色和簡化。

http://www.mixtion.org/gccfilter/

檢查diagcc ,你可以得到這樣的東西:

彩色消息演示

如果您的 gcc ≥ 4.9,您可以使用參數-fdiagnostics-color=always

4年后回答你的問題,這里應該提到clang

如果您使用 GCC 4.9,則可以添加-fdiagnostics-color=auto作為附加編譯標志。 在某些更高版本中,默認情況下已啟用顏色。

這是我目前的 hack,它主要在戰略位置插入換行符和縮進以及一些額外的注釋,但沒有解決 STL 冗長問題。

請注意,在當前實現的情況下,如果編譯器返回錯誤,則此腳本不會返回錯誤,因此執行此類操作將無法正常工作: (make &&./runApplication) 這肯定可以通過更好的 bash-fu 來解決。

#!/bin/bash
# SUBSTITUTION RULES:
# Note: All substitution rules must end in a semi-colon, inside of the closing quote
subColonSpace='s/: /:\n /g;'
subSrc='s/^src/\nsrc/;'
subError='s/error:/error:\n\n======================================\nERROR:/;'
subWarning='s/ *error: *\n/ERROR: /;'
subWarning='s/ *warning: *\n/WARNING: /;'
subNote='s/note:/\n NOTE:/g;'
subOpenTic='s/‘/\n   ‘/g;'
subOpenParen='s/(/(\n      /g; s/(\n *)/()/g;'
subCommaSpace='s/, /,\n      /g;'

# Note: The order of these may matter
sedExpr="$subColonSpace $subSrc $subError $subWarning $subNote $subOpenTic      
$subOpenParen $subCommaSpace"

makelogFile=makelog.tmp

make "$@" 2>&1 | sed "$sedExpr" | tee $makelogFile

如果你喜歡 Ruby 有GilCC GilCC 非常易於安裝(只需將其復制到 bin 文件夾)且易於使用(只需鍵入 GilCC 而不是“gcc”或“make”),它適用於 GCC 版本。 與基於 Perl 的腳本不同, GilCC具有諸如警告和錯誤數量以及編譯時間等統計信息。 您不必弄亂.bash 文件,它是跨平台的,只要您可以在您的機器上運行 Ruby。 由於它有Ruby的電源; 您可以讓 GilCC 在成功構建后執行不同的操作,例如觸發測試自動化、單元測試或對外部硬件進行編程。

這是下載頁面的鏈接: http://www.onlysolutionssoftware.com/gilcc/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM