54

我在 Linux 环境中开发 C++ 应用程序。我每天使用的工具包括带有 CDT 插件的 Eclipse、gdb 和 valgrind。
其他人使用什么工具?Linux 是否有任何东西可以与 Microsoft Visual Studio 的流畅性相媲美?

4

24 回答 24

54

我使用了一堆终端窗口。我在有趣的源文件上运行 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 并像我一样喜欢它。

于 2009-02-19T00:32:51.030 回答
24

当然还有 g++,还有Code::Blocks,它是一个绝对出色的跨平台 IDE(Win32、*nix、Mac)。

我使用来自 SVN 的每晚(最近更像是每周)构建。它几乎具有现代 IDE 所期望的所有花里胡哨。这真的是一个非常棒的开源项目。

此外,在 Linux 上,您可以享受使用Valgrind的乐趣,这可能是金钱可以买到的最好的内存跟踪器(它也可以做其他事情)工具。而且它是免费的 :) 轻松追踪内存泄漏等。

还有更多!Linux 是一个很棒的开发平台 :)

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

于 2008-08-20T00:25:06.317 回答
13

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

于 2008-11-25T11:13:01.193 回答
12
  • 克++

  • emacs

  • bash 命令行

  • emacs 中的 gdb 模式(类型 MX gdb)

  • 制作

于 2009-02-19T00:10:48.117 回答
9

emacs、cmake、gdb、git、valgrind。它可能不像 Visual Studio 那样流畅,但运行良好,并且通过 bash 脚本或 emacs lisp 添加功能很容易。

于 2008-12-08T23:07:51.807 回答
9

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

于 2008-12-08T23:43:48.550 回答
8

g++ 和制作

于 2008-08-19T23:51:28.580 回答
7

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

它实际上实现了一些你甚至不会在 VS 中看到的东西。例如,以垂直平铺模式打开头文件和cpp文件,并使光标在两者中同步,即:当您选择一个函数原型时,您的右侧总是有它的实现。

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

如果您可以尝试与 VS IDE 不同的方法。你可以考虑试试 vim。不过需要很长时间才能习惯。

于 2008-08-20T00:08:35.950 回答
6

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

此外,大多数情况下,我将它用于一个有点大的项目(~1e6 sloc)——这对于玩具项目来说可能是矫枉过正。

于 2008-08-20T02:05:37.043 回答
5

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

于 2008-08-20T06:44:36.887 回答
5

You need a standard toolchain + an IDE.

There's nothing much to say about the standard toolchain. Just install e.g. on Ubuntu/Debian via

aptitude install build-essential

The interesting part is about an IDE.

My personal impression is that nowadays - in the 21th century - vi/emacs/make/autotools/configure is not enough for developing software projects above a certain size (... and yes, please please please blame me for the heritage heresy ...).

Which IDE to choose is simply a matter of taste. You will find a lot of threads on SOF. Here is a permalink discussing which C++ IDE might be the "best": C++ IDE for Linux.

于 2009-12-23T21:22:17.573 回答
3
  • 海合会
  • GHC
  • 维姆
  • 制作
  • 示波器
  • 广发银行
  • 瓦尔格林德
  • 跟踪
  • 混帐

真的有什么你可能需要的吗?

于 2009-02-19T00:44:39.957 回答
3

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

于 2008-12-08T23:06:57.597 回答
2

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

于 2009-03-03T19:19:53.623 回答
2
  • 重击
  • 维姆
  • 制作
  • G++
  • 广发银行
  • 瓦尔格林德
  • 教授
  • svn

除了带有标签支持的良好终端外,永远不会看到 GUI;将代码、调试器、输出等全部保存在单独的窗口中,并且非常快速地来回切换。

于 2009-02-19T00:49:50.067 回答
2
  • 制作
  • vim
  • 克++
  • kdevelop(每天从 SVN 编译!)
  • 可以时使用 Mercurial,必须时使用 SVN,确实别无选择时使用 git(为使用它的项目做出贡献)
  • 瓦尔格林
于 2009-12-23T20:45:58.217 回答
0

Anjuta是一个不错的想法,它也让 Linux C++ 开发人员非常愉快。

于 2008-08-20T01:45:12.303 回答
0

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

除此之外,我充分利用 gdb 及其基于 gui 的版本 ddd 来解决代码问题或其他错误。对于一次性程序,就像已经发布的其他程序一样 - 我在终端使用 g++ 并制作一些更大的项目。

于 2008-08-29T06:24:29.060 回答
0

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

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

于 2008-12-09T18:45:20.463 回答
0

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

于 2011-03-05T22:03:16.177 回答
0

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

于 2008-12-08T23:02:14.313 回答
0

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

于 2009-12-23T22:01:42.887 回答
0

Mi 的首选总是带有很多插件的 emacs:ecb 提供了一些缓冲区来导航文件夹、gdb、svn 或 git 集成......这也是 mi 使用 Python 的首选。

作为第二选择,带有 C++ 插件的 Netbeans 非常简单且功能强大,但我认为它太重了。

于 2009-12-23T21:42:18.157 回答
0

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

搜索面向 C/C++ Linux 开发人员的 Eclipse Helios IDE(包括孵化组件),(120 MB)

在尝试使用可用的 .psf 文件构建 Linux 工具后发现了这一点。幸运的是,在 Helios 软件包下载页面的底部发现了这个软件包。

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

另请参阅:有关安装和使用 Eclipse Linux 工具的更新信息,请单击此处

于 2010-09-21T10:15:27.130 回答