您使用什么工具在Linux上开发C ++应用程序?

时间:2008-08-19 23:49:40

标签: c++ linux eclipse gdb valgrind

我在Linux环境中开发C ++应用程序。我每天使用的工具包括带有CDT插件的Eclipse,gdb和valgrind 其他人使用什么工具? Linux有什么可以与微软Visual Studio的光滑相媲美吗?

24 个答案:

答案 0 :(得分:50)

我使用了一堆终端窗口。我有vim运行有趣的源文件,make和g ++输出在另一个上用于编译器错误或gdb会话用于运行时错误。如果我需要帮助找到定义,我运行cscope并使用vim的cscope支持跳转。

Eclipse CDT是我的第二选择。与vim相比,它很好但是很大,笨拙和缓慢。

使用终端窗口和vim是非常灵活的,因为我不需要随身携带400 MB的Java,我可以在任何地方使用SSH会话。

当我需要找到内存问题时,我使用valgrind。

我使用strace来观察我的软件在系统调用级别上所做的事情。这让我可以清理连续四次调用time(0)的非常愚蠢的代码,或拨打过多次调用poll()或非阻塞read()或调用read()等内容一次读取1个字节的套接字。 (那是超级低效和懒惰!)

我使用objdump -d来检查机器代码,尤其是对于性能敏感的内部循环。这就是我发现字符串上数组索引操作符的缓慢性与使用迭代器相比的方式。

我使用oprofile尝试在优化的代码中找到热点,我发现它通常比gprof工作得更好,并且它可以执行诸如查找数据和指令缓存未命中之类的事情。这可以告诉你在哪里使用GCC的__builtin_prefetch删除一些有用的预取提示。我试图用它来找到热门错误预测的分支,但是无法让它为我工作。

更新:我发现perf的工作方式比oprofile好。至少在Linux上。学习使用perf并像我一样喜欢它。

答案 1 :(得分:23)

当然是g ++,还有Code::Blocks这是一个非常棒的跨平台IDE(Win32,* nix,Mac)。

我使用SVN的夜间(最近每周一次)构建。它几乎拥有您对现代IDE所期望的所有花俏。这真是一个非常棒的开源项目。

此外,在Linux上,您可以使用Valgrind,这可能是最好的内存跟踪器(它还有其他功能)可以购买的工具。并且它是免费的:)轻松跟踪内存泄漏等。

而且还有更多! Linux是一个非常棒的开发平台:)

(编辑)刚才意识到你在提问中提到了Valgrind,愚蠢的我读得太快了。

答案 2 :(得分:13)

在为Linux开发C ++应用程序时,我更喜欢使用一堆cmdline工具。 Vim扩展了很多插件。 Gdb与ddd,valgrind,libefence 和SCons(automake很痛苦...你知道在哪里)

答案 3 :(得分:12)

  • 克++

  • emacs的

  • bash命令行

  • emacs中的gdb-mode(键入M-X gdb)

答案 4 :(得分:8)

现在我使用Qt Creator。它是跨平台的,并且与Qt很好地集成,但(当然)你可以选择创建一个独立的应用程序。

答案 5 :(得分:8)

emacs,cmake,gdb,git,valgrind。它可能不像Visual Studio那样灵活,但效果很好,并且很容易通过bash脚本或emacs lisp添加功能。

答案 6 :(得分:7)

我相信KDevelop是最接近Microsoft Visual Studio的东西。 你得到了几乎所有东西(不幸的是VS调试器确实是一个杀手)。 它已经成熟,它的发展非常迅速和充满希望。

它实际上实现了一些你甚至在VS中都看不到的东西。例如,在垂直切片模式下打开头文件和cpp文件,并在两者中同步游标, 即:当你选择一个函数原型时,你总是在右边实现它。

KDevelop是一个KDE项目,但在Gnome上运行。 Anjuta是Gnome的一个同等项目,但我发现它无法用于实际工作。对于堆栈的其余部分,gcc使用valgrind ddd(gdb IDE)和python来编写代码脚本。

如果您可以尝试使用与VS IDE不同的方法。你可以考虑尝试使用vim。虽然需要很长时间才能适应它。

答案 7 :(得分:7)

g ++和make

答案 8 :(得分:6)

Eclipse CDT真的很不错。我仍然不得不诉诸Emacs,但我真的很喜欢索引,调用树,键入树,重构支持(认为它不像Java重构)等等。如果你自定义语法突出显示是非常强大的(可以有单独的)局部变量,函数参数,方法等的颜色。代码完成也非常方便。我主要使用Eclipse 3.3但3.4也很棒。

此外,大多数情况下,我正在将它用于一个有点大的项目(~1e6 sloc) - 这对于玩具项目而言可能有点过分。

答案 9 :(得分:5)

当我在linux上开发C ++代码时,我使用emacs作为编辑器和gdb前端。后来,我的公司为所有程序员购买了SlickEdit,这是一个不错的IDE,可能与Visual Studio不相上下。我们广泛使用gdb,偶尔使用valgrind和gprof。我强烈建议使用脚本语言来补充日常任务中的C ++。我从PERL到python再到当前的红宝石。所有这些都完成了工作,并且在C ++存在缺陷的地方具有优势。当然,您可以使用所有shell命令。我每天都使用sort(),uniq(),awk等。还有一个建议是ack,一个grep后继者。

答案 10 :(得分:5)

您需要一个标准工具链+一个IDE。

关于标准工具链没什么可说的。只需安装,在Ubuntu / Debian上通过

aptitude install build-essential

有趣的部分是关于IDE。

我个人的印象是,现在 - 在21世纪 - vi / emacs / make / autotools / configure不足以开发超过一定规模的软件项目(...是的,请请怪我对于遗产异端 ...)。

选择哪种IDE只是一种品味问题。你会在SOF上找到很多线程。这是一个永久性的讨论,讨论哪个C ++ IDE可能是“最好的”:C++ IDE for Linux

答案 11 :(得分:3)

我使用NetBeans C ++插件,它非常棒,并与CVS和SVN集成。项目管理方面也很好。我在几分钟内就开始运行了。这是一个令人印象深刻的IDE,但作为Java,可能有点迟钝。

答案 12 :(得分:3)

  • GCC
  • GHC
  • 的Vim
  • CMake的
  • cscope的
  • GDB
  • Valgrind的
  • strace的
  • GIT中

你真的还需要其他什么吗?

答案 13 :(得分:2)

  • 的Vim
  • G ++
  • GDB
  • Valgrind的
  • GPROF
  • SVN

除了带有标签支持的好终端外,永远不会看到GUI;将代码,调试器,输出等全部保存在单独的窗口中,并快速返回和转发。

答案 14 :(得分:2)

  • CMake的
  • VIM
  • 克++
  • kdevelop(每天从SVN编译!)
  • 当我可以使用Mercurial时,必须使用SVN,在没有其他选择的情况下git(对使用它的项目做出贡献)
  • 的valgrind

答案 15 :(得分:1)

除了已列出的许多内容之外,我们还使用autoconf工具集将我们的程序部署到用户。

答案 16 :(得分:0)

Eclipse孵化项目Linux Tools集成了C / C ++开发工具。 它是一个GUI插件,可以将Valgrind,GProf,GCov,SystemTap等工具集成到Eclipse C ++ CDT IDE中。

为C / C ++ Linux开发人员搜索Eclipse Helios IDE(包括Incubating组件),(120 MB)

尝试使用可用的.psf文件构建Linux工具后找到此内容。 值得庆幸的是,这个软件包隐藏在Helios软件包下载页面的底部。

请注意,这是一个孵化项目,因此您可以期望支持只会随着时间的推移而变得更好。

参见: 有关安装和使用Eclipse Linux Tools Click Here

的更新信息

答案 17 :(得分:0)

我使用系统上的任何内容。我更喜欢Eclipse CDT作为编辑器,而g ++作为编译器。但是,如果eclipse不是一个选项我使用vi,这也很好。

答案 18 :(得分:0)

Mi首选是带有大量插件的emacs:ecb提供一些缓冲区来浏览文件夹,gdb,svn或git集成......这也是使用Python的第一选择。

作为第二选择,使​​用C ++插件的Netbeans非常简单且非常强大,但我认为太重了。

答案 19 :(得分:0)

用于静态代码分析的FlexeLint,除了上面提到的:
带有CDT,gcc,make,gdb,valgrind,bash shell的Eclipse 源版本控制:Clearcase或git,具体取决于项目。

答案 20 :(得分:0)

我在Windows上使用Eclipse + CDT,在Linux上使用Cygwin + g ++进行交叉编译。

(交叉编译器是使用crosstool构建的,这是一个很好的脚本集,用于生成交叉编译器)

答案 21 :(得分:0)

用于编辑的Eclipse CDT,用于源代码管理的SVN,用于构建管理的SCons,用于自动构建的CruiseControl以及专有的单元测试框架。

答案 22 :(得分:0)

我是KDevelop的另一个人。它有一套非常多样化的工具。我不熟悉VS以及它是否通过其界面集成了控制台访问权限,但是KDevelop可以让你在IDE中运行一个konsole,我总觉得它非常有用。现在,你可以随时给Netbeans一个完整的C / C ++支持。

除此之外,我充分利用了gdb及其基于gui的版本ddd来解决代码或其他错误的问题。对于丢弃程序,就像已发布的其他程序一样 - 我在终端使用g ++并为一些较大的项目做准备。

答案 23 :(得分:0)

Anjuta是一个很好的主意,它使得Linux C ++开发者也非常愉快。