我在 Linux 环境中开发 C++ 应用程序。我每天使用的工具包括带有 CDT 插件的 Eclipse、gdb 和 valgrind。
其他人使用什么工具? Linux 上是否有任何东西可以与 Microsoft Visual Studio 的流畅性相媲美?
最佳答案
我使用了一堆终端窗口。我在有趣的源文件上运行 vim,在另一个文件上运行 make 和 g++ 以用于编译器错误或用于运行时错误的 gdb session 。如果我需要帮助查找定义,我会运行 cscope 并使用 vim 的 cscope 支持来跳转。
Eclipse CDT 是我的第二选择。与 vim 相比,它很好,但体积庞大、笨拙且缓慢。
使用终端窗口和 vim 非常灵活,因为我不需要随身携带 400 MB 的 Java,我可以在任何地方使用 SSH session 。
当我需要查找内存问题时,我会使用 valgrind。
我使用 strace
来观察我的软件在系统调用级别上执行的操作。这让我可以清理连续四次调用 time(0)
或对 poll()
或非阻塞 read 进行太多调用的非常愚蠢的代码()
或诸如在套接字上调用 read()
以一次读取 1 个字节。 (那就是 super 低效又懒惰!)
我使用 objdump -d
来检查机器代码,尤其是对性能敏感的内部循环。这就是我发现字符串上的数组索引运算符与使用迭代器相比速度慢的原因。
我使用 oprofile 尝试在优化代码中查找热点,我发现它通常比 gprof 工作得更好一些,它可以执行诸如查找数据和指令缓存未命中之类的事情。这可以告诉您使用 GCC 的 __builtin_prefetch
在哪里删除一些有用的预取提示。我也尝试使用它来查找错误预测的热门分支,但无法让它为我工作。
更新:我发现 perf 比 oprofile 更有效。至少在 Linux 上。学习使用 perf 并像我一样热爱它。
https://stackoverflow.com/questions/17228/