2

是否有关于开始使用 g++ 和 gdb 的良好“操作方法”或“入门”指南?

一些背景。体面的程序员,但到目前为止,我已经在 Visual Studio 的 Windows 上完成了所有工作。

我有一点使用终端编译文件的经验(除了 .h 和 1 或 2 .cpp 之外没有太多)。但除此之外没有什么。

任何人都知道如何开始在 Linux 上编码的好入门?

4

2 回答 2

4

阅读一些好书,尤其是Advanced Linux ProgrammingAdvanced Unix Programming。另请阅读Linux 文档项目中的高级 bash 脚本编写指南和其他文档

显然,在您的笔记本电脑上安装一些 Linux 发行版(不是在某些 VM 中,而是在真实的磁盘分区上)。如果您有类似 debian 的发行版,请在其上运行aptitude build-dep gcc-4.6 gedit以获得许多有趣的开发人员包。

学习一些命令行技巧。学会使用man命令;安装manpagesmanpages-dev打包后,键入man man(使用空格键“滚动文本”,q键退出)。另请阅读intro(2)手册页。当您忘记如何使用cptry之类的命令时cp --help

使用git 之类的版本控制系统,即使是一个人的小型项目。

备份您的文件。

阅读有关Linux内核系统调用自由软件X11PosixUnix的几个相关维基百科页面

努力使用命令行。例如,尝试在命令行上做任何事情一周或更长时间。避免使用您的桌面,可能还有您的鼠标。学会使用emacs

阅读GNU make等构建器程序

从他们的源代码(例如从sourceforgefreecodegithub)中检索几个免费软件并练习构建和编译它们。研究他们的源代码

在命令行(在终端中)启动的基本提示(如果找不到命令,则需要安装提供它的软件包)。

  • 运行emacs;有一个教程菜单;练习半个小时。

  • 编辑helloworld.c程序(main调用某个hello函数)

  • gcc -g -Wall helloworld.c -o helloworld用;编译它 改进您的代码,直到没有给出警告。总是传递-Wallgccg++得到几乎所有的警告。

  • 运行它./helloworld

  • 调试它gdb ./helloworld,然后

    1. 使用help命令
    2. 使用该b main命令添加断点main,同样为您的hello函数添加断点。
    3. gdb在使用下运行它r
    4. 用于bt获取回溯
    5. 用于p打印一些变量
    6. 用于c继续执行被调试的程序。
  • 编写一个小程序Makefile,以便能够helloworld使用make

  • 学习如何在 Emacs中调用make(with M-x compile) 和gdb(with )M-x gdb

了解有关valgrind的更多信息(用于检测大多数内存泄漏)。也许考虑在您的某些应用程序中使用Boehm 的 GC 。

于 2012-10-23T06:20:49.647 回答
3

你有很多东西要学。我不会给你细节,但是作为一个从事 unix 和 c/c++ 开发几十年的人,我会试着给你一些开始的话题。

我的主要建议是开始尝试。用 C 或 C++ 编写最简单的程序(打印“Hello there, world!”是传统的)并弄清楚如何从命令行编译和运行它。然后,一旦你有了一个编译的版本,在调试器下启动它并玩弄断点、打印表达式等。一旦你启动并运行了这个最简单的程序,你就会明白调试器是什么告诉你,添加一个类、函数、结构或其他任何感觉像是一小步的东西,然后再次完成循环。与您从一个非常大的程序开始相比,您将通过这种方式进行得更快。

仍然处于非常高的水平,这里有一些你至少需要弄清楚的主题。请注意,“从小处着手”方法适用于以下任何主题。

  • Running g++:它有相当不错的命令行语法在线文档,虽然一开始你一定会觉得它很吓人,但请尝试寻找最简单的起点。
  • 查找要使用的文本编辑器。 Vim并且emacs是传统的(并且非常非常强大),但两者都有相对陡峭的学习曲线。如果你身边有人帮助你,那就更好了。还有其他选择,但作为emacs用户自己,恐怕我对它们不太熟悉。
  • 熟悉gdb. 它是一个非常强大的工具,可以帮助您理解您的程序。再次,它有大量的在线文档,将回报仔细阅读。
  • 熟悉一些标准的 unix 命令会很有用:lscd和移动 unix 目录导航的基础知识;grep用于快速搜索源文件。
  • 您必须习惯命令行方法与ide 方法。前者是传统的 unix 开发人员模型,您可以将所需的操作从其他工具的集合中组合在一起,而不是让 ide 对您隐藏大部分这些知识。

如果您的项目是多文件的,特别是如果它是一个完整学期的项目,您还可以考虑学习以下主题。

  • Make是一个描述如何编译和链接多文件项目的工具,这样你就不必每次都记住如何手动完成。 Make不幸的是,它因难以使用而享有当之无愧的声誉,但这在跨越多个目录的非常大的项目中大多是正确的,并且在线可能有很好的简单示例。
  • 即使对于一些相对较小的项目,我也会强烈考虑使用源代码控制系统,例如gitor 。hg拥有您所做工作的存档版本会更加安全,这样您就可以快速备份。两者对于一个小型的一次性项目来说都是多余的,但它们值得自己学习githg我今天理解的传统观点是,它们在理念和核心功能上非常相似,但hg在命令行级别肯定更一致,因此更容易开始。

我怀疑这是相当吓人的,特别是如果您之前实际上没有接触过 unix 命令环境。我再次强调我上面的第一条建议:从简单和实验开始学习。这可以最大限度地减少您在任何给定时间点必须绕开的新东西的数量。

于 2012-10-23T05:05:58.360 回答