C/C++ 編程有哪些值得推薦的工具?

工欲善其事,必先利其器。最近在搜集這方面的工具,發現以前自己什麼都自己做,累得要死還事倍功半,too young too simple , sometimes naive 。

請推薦C/C++編程中犀利的工具 ! 包括關乎程序員編程、debug、性能、測試、軟體工程等各方面的好工具!(最好是免費的,更好的是開源的 :))

樓主說幾個拋磚:

winmerge ,堪比ultracompare的開源工具;

Luke StackWalker ,查找程序性能瓶頸的工具;

visual assist x ,Visual Studio 神器級插件;

XueTr ,windows下安全監測/Hook監測的很好的工具;

etc.


對於想嘗(ru)試(keng)emacs的同學,可以試試spacemacs,一個emacs的發行版,幾乎所有常用包都已經有專人幫你配置好了。

--很短的分割線

我推薦幾個emacs下用於c/c++的插件:

  1. irony-mode, 調用clang的補全庫進行補全,完美解決了以前emacs自動補全速度慢的問題,比clion和netbeans都快。
  2. company-mode, emacs下萬用的一個補全前端,配合irony-mode使用的。
  3. flycheck, 靜態查錯,非常好用,而且速度快,完爆clion。irony-mode有提供一個flycheck的後端。另外還可以使用cppcheck(也是一個靜態代碼分析,但並不是語法之類的查錯,而是bug分析,譬如越界,內存泄露等,甚至分析coding style)作為後端,和irony可以一起用。
  4. eldoc,文檔查看。我個人使用中最重要的功能就是在mini-buffer(以及company-mode)中顯示函數的signature。
  5. neotree,一個文件瀏覽用的bar,可以替代speedbar(這玩意兒真的垃圾)的文件瀏覽功能。
  6. helm-gtags,一個gtags的前端,主要用於跳轉函數定義,類定義,查找caller等。利用了helm (這個簡直是emacs中一個跨時代的插件,誰用誰知道)。helm-gtags中的幾乎所有命令都非常有用。
  7. projectile, 項目管理工具,非常方便地跳轉項目中的文件以及快速跳轉項目相關的buffer。功能相當多。尤其是projectile-grep實在是必備利器。

接下來幾個非emacs插件,但是很常用的:

  1. gdb, 調試器。emacs有內置的和gdb的interface,可以直接在emacs中調試,並且提供類似ide的功能(紅點顯示breakpoints,在源碼中標示當前位置)。並且emacs speedbar可以watch expressions,類似ide的watch功能。建議將gdb-many-windows打開,可以自動分屏為6個windows,分別顯示gdb,源碼,local variable, stack, output等。雖然看起來簡陋,但是比起cliion這種一開調試就吃掉一兩g內存,走一步卡幾秒的渣渣還是好用不少。netbeans就不說了,貌似至今還沒有可用的c++調試器。。。
  2. valgrind,一套代碼分析工具,可用於查內存泄露等問題。我主要使用其中的附帶的profiler,叫做callgrind。
  3. kcachegrind,可以將callgrind的輸出變得更直觀的一個前端。
  4. 能夠使用wiki的人可以看這個,列出了很多靜態代碼分析工具:https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#C.2FC.2B.2B
  5. gprof2dot,屌炸天的一個將callgrind的輸出轉成圖形的工具。效果圖(請點開大圖看):

另外幾個不是直接用於c/c++,但是我覺得很有用的插件:

  1. helm,上面提到過,最牛x的emacs插件了。完全改變了emacs用法。尤其推薦新手馬上裝,配合meta+x可以大大減少你記憶快捷鍵的痛苦。
  2. ace-jump-mode,一個用於跳轉的插件,神器之一。具體用法參見主頁,文字不容易說清。
  3. 非插件,但是這兩個函數實在太有用,第一個是自動縮進整個代碼,第二個是自動縮進當前段落。第二個我用得尤其多,綁定到快捷鍵上,就是一鍵自動縮進,對於python來說更是利器。。

(defun indent-whole-buffer ()
"indent whole buffer"
(interactive)
(delete-trailing-whitespace)
(indent-region (point-min) (point-max) nil)
(untabify (point-min) (point-max)))
(defun indent-current-paragraph ()
"indent current paragraph"
(interactive)
(save-excursion
(delete-trailing-whitespace)
(mark-paragraph)
(indent-region (region-beginning) (region-end) nil)))

還有很多有用的插件,譬如自動補齊括弧,自動高亮對齊的括弧,自動在operator和標點周圍插入空格,等等。限於這是關於c/c++的主題,我就不繼續介紹了。emacs用久了大家都會慢慢知道這些的。

BTW,對於python用戶,強烈推薦elpy。當裝上這個插件後,我默默刪了pycharm。


clang-format

格式化c++代碼,同類工具還有astyle。保持代碼風格統一是個好習慣。等以後我做C++的個人項目,也會先扔一個clang-format文件上去。

qt creator

vs以外我覺得最好用的c++ ide,代碼補全質量高(基於libclang),有valgrind支持、vim插件,支持ninja,夠用。寫qt程序拖控制項也蠻爽的。


集成開發環境(IDE)

C/C++集成開發環境列表

  • AppCode :構建與JetBrains』 IntelliJ IDEA 平台上的用於Objective-C,C,C++,Java和Java開發的集成開發環境
  • CLion:來自JetBrains的跨平台的C/C++的集成開發環境
  • Code::Blocks :免費C,C++和Fortran的集成開發環境
  • CodeLite :另一個跨平台的免費的C/C++集成開發環境
  • Dev-C++:可移植的C/C++/C++11集成開發環境
  • Eclipse CDT:基於Eclipse平台的功能齊全的C和C++集成開發環境
  • Geany :輕量級的快速,跨平台的集成開發環境。
  • IBM VisualAge :來自IBM的家庭計算機集成開發環境。
  • Irony-mode:由libclang驅動的用於Emacs的C/C++微模式
  • KDevelop:免費開源集成開發環境
  • Microsoft Visual Studio :來自微軟的集成開發環境
  • NetBeans :主要用於Java開發的的集成開發環境,也支持其他語言,尤其是PHP,C/C++和HTML5。
  • Qt Creator:跨平台的C++,Javascript和QML集成開發環境,也是Qt SDK的一部分。
  • rtags:C/C++的客戶端伺服器索引,用於 跟基於clang的emacs的集成
  • Xcode :由蘋果公司開發
  • YouCompleteMe:一個用於Vim的根據你敲的代碼快速模糊搜索並進行代碼補全的引擎。

構建系統

  • Bear :用於為clang工具生成編譯資料庫的工具
  • Biicode:基於文件的簡單依賴管理器。
  • CMake :跨平台的免費開源軟體用於管理軟體使用獨立編譯的方法進行構建的過程。
  • CPM:基於CMake和Git的C++包管理器
  • FASTBuild:高性能,開源的構建系統,支持高度可擴展性的編譯,緩衝和網路分布。
  • Ninja :專註於速度的小型構建系統
  • Scons :使用Python scipt 配置的軟體構建工具
  • tundra :高性能的代碼構建系統,甚至對於非常大型的軟體項目,也能提供最好的增量構建次數。
  • tup:基於文件的構建系統,用於後台監控變化的文件。

靜態代碼分析

提高質量,減少瑕疵的代碼分析工具列表

  • Cppcheck :靜態C/C++代碼分析工具
  • include-what-you-use :使用clang進行代碼分析的工具,可以#include在C和C++文件中。
  • OCLint :用於C,C++和Objective-C的靜態源代碼分析工具,用於提高質量,減少瑕疵。
  • Clang Static Analyzer:查找C,C++和Objective-C程序bug的源代碼分析工具
  • List of tools for static code analysis :來自維基百科的靜態代碼分析工具列表

這個網站整理的比較全,可以看看值得推薦的C/C++框架和庫


這種問題有啥好問的,每次都是看別人說得高大上,最後我還是用VS


主要是linux下的工具:

編輯器

  • vim
  • emacs
  • kate(KDE下一個功能強大的編輯器)

IDE(集成開發環境)

  • eclipse+cdt
  • clion
  • qt cteator

編譯器

  • gcc
  • g++
  • clang

調試器

  • gdb

構建工具

  • cmake
  • make

內存工具

  • Purify
  • Valgrind工具集(包括剖析工具Callgrind和線程分析工具Helgrind等)
  • KCachegrind

剖析工具

  • gprof開源剖析工具,通常作為gcc編譯器的一部分。
  • Quantify是IBM的一個功能強大的商業剖析工具。

靜態檢查器

  • Lint
  • google cpplint
  • C++test
  • cppcheck

並行編程工具

  • Posix Threads
  • MPI(Message Passing Interface)
  • MapReduce(並行計算框架)

代碼工具(命令行工具)

  • nm 列出來自對象文件的符號
  • objdump 顯示對象文件信息
  • strings 列出二進位文件中可輸出的字元串
  • strip 刪除來自對象文件的符號
  • m4 宏處理程序
  • indent 代碼格式化工具

監測工具

  • time 計時工具
  • ps 顯示運行進程的當前狀態
  • top 給出系統的詳細信息
  • strace 記錄對操作系統的所有訪問,例如內存分配、文件I/O、系統調用和子進程的啟動


strace大法好

pstack大法好

gdb大法好

ddd大法好

valgrind大法好

cmake大法好

你裝個Visual Studio,這些就都有了


必須有Visual Studio


難道不是source insight 嗎?


1. make automake:

對於超過100個源文件的大項目,每次修改1個文件之後都要重新編譯整個工程實在是一件痛苦而又浪費時間的事情。

有了make,只需要寫好Makefile,每次都會自動判斷哪幾個文件需要重新編譯,節省時間。

2. gdb

調試C/C++代碼,我最喜歡用的就是gdb。

單步調試、查看棧楨、監視變數等調試所需功能一應俱全,

尤其我本人是個鍵盤黨,對這種只需要鍵盤就能使用的調試工具更加喜愛。

3. valgrind

這是個強大的工具,可以檢測C/C++中的各種內存問題。

應用 Valgrind 發現 Linux 程序的內存問題


恰好我現在就做c++項目,用cmake+mingw+eclipse,用著挺舒服,很好用。


$ sudo apt-get install cgdb

cgdb把gdb包裝了一下,好看多了。用法也是類似的。


更新:windows下首選VS,版本至少vs2005以上,或者用最新的VSCode,不過需要自己配插件,好處是免費,如果做單片機c開發首選eclipse,linux下如果做單片機首選eclipse,其次是clion。eclipse兼容性最好,不過穩定性差一些,vs在win下沒有對手,clion用cmake,相比來說大部分c程序用的都是makefile,需要適應一下。(by:深秋)

另外:需要軟體的可以看這裡《C/C++開發和學習人員必備工具下載集合 - 編程少年》

----------------------------------------------------分割線------------------------------------------------

Dev c++:這個IDE是windows環境下的,操作簡單,功能也不弱,適合新手使用。

Codeblocks(強力推薦): 功能比較強大的 c/c++ IDE,有著不錯的智能提示,第一次用的時候,才發現原來編程可以這樣舒服。下載地址:http://rj.baidu.com/soft/detail/16711.html

使用教程:CodeBlocks的入門使用教程 - 編程少年

Clion:JetBrain公司的產品,優點還是智能提示和強大的GUI設計,還有多語言融合功能。


按系統分:

windows系統下,windows編程:VS+VA

windows系統下,unix編程:VS+VA寫代碼,winscp上傳, 調試用gdb/dbx .

Mac系統下,unix編程:VsCode+各種插件 寫代碼,腳本ftp上傳。或者本機開個ssl服務,secrt 登錄本機vi編輯。調試用gdb。

按功能分:

寫代碼:VS

比較文件:beyond compare 或者 直接diff 命令

編譯: VS(nmake) ,g++ gmake libtool auto工具集

單元測試:cppunit

...

個人覺得寫代碼還是VS舒服


就沒人說vim么?雖然上手慢一點,但是熟悉了之後,編程效率奇高。配上一些插件,功能不輸任何IDE。

調試用gdb,結構輕巧卻功能強大。

工具鏈:Linux+putty+vim+gcc+makefile+gdb+git


可以試試 xmake 。。比起直接寫makefile 簡單多了。。而且跨平台。。基於Lua,靈活方便

target("console")
set_kind("binary")
add_files("src/*.c")


Sublime Text

Code::Blocks

最愛用了。ST極大提高寫代碼效率


好收藏了


一個Virtual Studio足矣


vs


用cmake+mingw+eclipse


說明在前,別人推薦的都要用一下,我之前一直用Notepad++,後來發現Sublime text 3 好贊,其餘沒有可推薦的,在公司伺服器上開發,什麼都沒許可權安裝,了解的就很少。

我其實關注大家軟體發布版中Crash和開發中函數運行效率分析這些東西在Windows和Linux下怎麼處理的。

還有就是UI怎麼調試的,現在就是運行,測試,不會用代碼測試呀。

目前自己感覺沒什麼好的解決方案,求推薦。


不是我說,看那麼多列舉,我都暈了。

Vim編輯,CMake構建項目,clang來編譯,自己插cout來調試,這樣返璞歸真不好么?


vs+jetbrains的resharper c++

好用上月球


推薦閱讀:

你有用了Gentoo就不想用Arch的感覺嗎?
如果代碼都開源甚至所有技術都開源,那麼人類社會是否能迎來一次質的飛躍?
閱讀開源項目代碼的意義有哪些?
有哪些有意思的,很cool的開源項目 ?
Intel 為什麼會成為 Linux 內核最大的貢獻者?

TAG:工具 | 編程 | C編程語言 | 開源 | C |