我在Linux环境中开发C++应用程序.我每天使用的工具包括带有CDT插件的Eclipse,gdb和valgrind.
其他人使用什么工具?Linux有什么可以与微软Visual Studio的光滑相媲美吗?
我用了一堆终端窗口.我有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并像我一样喜欢它.
g ++当然,还有Code :: Blocks这是一个非常棒的跨平台IDE(Win32,*nix,Mac).
我使用SVN的夜间(最近每周更新)构建.它几乎拥有您对现代IDE所期望的所有花俏.这真是一个非常棒的开源项目.
此外,在Linux上,您可以使用Valgrind,这可能是最好的内存跟踪器(它还有其他功能)可以购买的工具.并且它是免费的:)轻松跟踪内存泄漏和更多内容.
而且还有更多!Linux是一个很棒的开发平台:)
(编辑)刚刚意识到你在你的问题中提到了Valgrind,愚蠢的我读得太快了.
在为Linux开发C++应用程序时,我更喜欢使用一堆cmdline工具.Vim扩展了很多插件.Gdb与ddd,valgrind,libefence和SCons(automake很痛苦...你知道在哪里)
克++
emacs的
bash命令行
emacs中的gdb-mode(类型为MX gdb)
使
emacs,cmake,gdb,git,valgrind.它可能不像Visual Studio那样灵活,但效果很好,并且很容易通过bash脚本或emacs lisp添加功能.
现在我使用Qt Creator.它是跨平台的并且与Qt很好地集成,但是(当然)你可以选择创建一个独立的应用程序.
g ++和make
我相信KDevelop是最接近Microsoft Visual Studio的东西.你得到了几乎所有东西(不幸的是VS调试器确实是一个杀手).它已经成熟,其发展非常迅速和充满希望.
它实际上实现了一些你甚至在VS中都看不到的东西.例如,在垂直平铺模式下打开头文件和cpp文件,并使光标在两者中同步,即:当您选择函数原型时,您总是在右侧实现它的实现.
KDevelop是一个KDE项目,但在Gnome上运行.Anjuta是Gnome的一个同等项目,但我发现它无法用于实际工作.对于堆栈的其余部分,gcc使用valgrind ddd(一个gdb IDE)和python来编写我的代码脚本.
如果您可以尝试与VS IDE不同的方法.你可以考虑尝试使用vim.虽然需要很长时间才能适应它.
Eclipse CDT真的很不错.我仍然不得不诉诸Emacs,但我真的很喜欢索引,调用树,键入树,重构支持(认为它不像Java重构)等等.如果你自定义语法突出显示是非常强大的(可以有单独的)局部变量,函数参数,方法等的颜色.代码完成也非常方便.我主要使用Eclipse 3.3但3.4也很棒.
此外,大多数情况下我将它用于一个有点大的项目(~1e6 sloc) - 它可能对玩具项目来说太过分了.
当我在linux上开发C++代码时,我使用emacs作为编辑器和gdb前端.后来,我的公司为所有程序员购买了SlickEdit,这是一个不错的IDE,可能与Visual Studio不相上下.我们广泛使用gdb,偶尔使用valgrind和gprof.我强烈建议使用脚本语言来补充日常任务中的C++.我从PERL到python再到当前的红宝石.所有这些都完成了工作,并且在C++存在缺陷的地方具有优势.当然,您可以使用所有shell命令.我每天都使用sort(),uniq(),awk等.还有一个建议是ack,一个grep后继者.
您需要一个标准的工具链+一个IDE.
关于标准工具链没什么可说的.只需在Ubuntu/Debian上安装即可
aptitude install build-essential
有趣的部分是关于IDE.
我个人的印象是,现在 - 在21世纪 - vi/emacs/make/autotools/configure不足以开发超过一定规模的软件项目(...是的,请请责怪我遗产的异端 ...... ).
选择哪种IDE只是一种品味问题.你会在SOF上找到很多线程.这是一个永久性的讨论,讨论哪个C++ IDE可能是"最好的":Linux的C++ IDE.