[英]sprintf/printf/fprintf - tool to identify format specifiers mismatches to param counts in multiple src files
我正在研究幾個用c(文件100個)編寫的舊程序,這些程序與printf()
系列功能有些不匹配。 具體來說,參數數量和格式說明符數量不匹配。
有沒有可以用來在src文件中輕松找到行號的工具。 這些程序在運行時出現段錯誤,但我想主動查找問題,而不是使用gdb查找錯誤。
謝謝!
默認情況下, clang
和gcc
都會引發警告。 如果由於某種原因看不到編譯器警告,則可以嘗試使用-Wall
和-Wextra
。
$ cc parg.c -o parg
parg.c:5:34: warning: more '%' conversions than data arguments [-Wformat]
printf("arg1: %i\narg2: %i\n", 8);
~^
parg.c:6:33: warning: data argument not used by format string
[-Wformat-extra-args]
printf("arg3: %i\n", 3, 5);
~~~~~~~~~~~~ ^
如果您的問題是您正在動態構建格式字符串,那么您需要查看執行情況。 我不知道有任何軟件可以審查代碼並確定您是否可能傳遞錯誤的格式字符串,因為這是一個開放式問題。
-Wall
和-Wextra
是有用的標志,但是我注意到,當您真正想要的是-Wformat
和-Wformat-extra-args
( -Wformat
實際上打開時)時,建議我摒棄所有警告是有點-Wextra
編程 -Wformat-extra-args
)。 而且,正如@JonathanLeffler在評論中指出的那樣, -Wformat-nonliteral
對於確保您查看傳遞非文字字符串的實例並進行分析以查看是否可能導致運行時錯誤非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.