我試圖強制ValGrind告訴我我的程序出了什麼問題。互聯網上的每一頁文檔都說你必須向GCC提供-g
選項,但沒有一個文檔說明你是否需要編譯時或鏈接時間(或兩者)需要此標誌。那它是哪個?何時使用-g標誌到GCC
回答
GNU ld文檔說-g
將被忽略,所以傳遞它沒有多大意義。一般來說,你通過-g
到gcc
(這對於整個編譯過程來說確實是一個前端,而不僅僅是一個編譯器),它會處理它。
要100%清楚:您在說_gile-time_需要'-g',而_link-time_不需要'-g'? – MathematicalOrchid
@MathematicalOrchid是的,如果您有任何疑問,請參閱「man ld」。它會告訴你'-g'是爲了與其他tools_兼容而提供的。 – devnull
@MathematicalOrchid是的,它是。 – pmr
GCC提供了-g標誌,以獲得調試,那麼,你喜歡編譯的 方案考慮example.c像一個代碼:如果您編譯使用說make example
這將觸發
#include <stdio.h>
/* Warning: This program is wrong on purpose. */
int main()
{
int age = 10;
int height;
printf("I am %d years old.\n");
printf("I am %d inches tall.\n", height);
return 0;
}
默認命令
cc example.c -o example
現在你運行命令狀
cc -g example.c -o example1
然後您會發現size of the file example1
大於size of example
,因爲-g標誌啓用了調試信息。
運行valgrind時不需要-g標誌。 -g僅在編譯過程中需要。
- 1. 與-g標誌使用GCC運行GDB
- 2. 用於g ++調用的等效gcc標誌
- 3. ICU Transliterator不無-02標誌使用g ++
- 4. 有沒有gcc的選項丟棄-g標誌?
- 5. #ifdef標誌告訴gcc和g ++編譯器之間的區別?
- 6. GCC -g vs -g3 GDB標誌:有什麼區別?
- 7. g ++無法鏈接到libdl即使使用-ldl標誌
- 8. Ccache不能使用gcc -M標誌?
- 9. gcc彙編標誌
- 10. GCC標誌給SCons
- 11. GCC優化標誌
- 12. gcc彙編標誌
- 13. 將g ++遷移到gcc
- 14. g ++:編譯時沒有-l標誌
- 15. g ++等效的編譯器標誌到VC++編譯器標誌
- 16. Node.js在使用-g標誌時總是給出錯誤
- 17. 使用-nostartfiles時的g ++靜態鏈接標誌-nodefaultlibs -nostdlib
- 18. GNU gcc和g ++
- 19. gcc/g ++ vs icc
- 20. PostgreSQL的REGEXP_REPLACE 'G' 標誌
- 21. 警告:使用gcc -std = C89 -g -pedantic FILENAME.C
- 22. OpenCV - 只使用g ++。不是gcc或nvcc
- 23. Mac OSX使用gcc 6.2.0,但g ++ 4.9.2
- 24. addr2line打印 「??:0」 即使我用`GCC -g`
- 25. 在gcc中使用-g和-O2選項
- 26. 如何使用Rcpp和內聯設置g ++編譯器標誌?
- 27. 如何使用-g調試標誌編譯boost?
- 28. 什麼是g ++標誌-DIL_STD用於?
- 29. 覆蓋GCC編譯標誌
- 30. GCC優化標誌問題
'-g'是一個編譯器選項而不是鏈接器選項。 – Jarod42