是否有一个很好的'使用方法'或'入门指南'开始使用g ++和gdb?
一些背景知识。体面的程序员,但到目前为止,我已经在Visual Studio中的Windows上做了一切。
我有一点使用终端编译文件的经验(不超过.h和1或2 .cpp)。但除此之外什么都没有。
任何人都知道如何在Linux上开始编码?
答案 0 :(得分:4)
阅读一些好书,特别是Advanced Linux Programming和Advanced Unix Programming。另请阅读advanced bash scripting guide
中的Linux Documentation Project和其他文档显然,在笔记本电脑上安装一些Linux发行版(不是在某些虚拟机中,而是在真正的磁盘分区上)。如果你有像debian这样的发行版,可以在其上运行aptitude build-dep gcc-4.6 gedit
以获得很多有趣的开发人员包。
学习一些命令行技能。学习使用man
命令;安装manpages
和manpages-dev
软件包后,键入man man
(使用空格键“滚动文本”,使用q
键退出)。另请阅读intro(2)手册页。当您忘记如何使用cp
之类的命令时,请尝试cp --help
。
使用像git这样的版本控制系统,即使对于一个人的小项目也是如此。
备份您的文件。
在Linux,kernels,syscalls,free software,X11,Posix,Unix上阅读几个相关的维基百科页面
尽量使用命令行。例如,尝试在命令行上执行一周或更长时间的操作。避免使用您的桌面,可能还有鼠标。学习使用emacs
。
了解像GNU make
这样的构建程序从源代码中检索多个免费软件(例如从sourceforge或freecode或github)并练习构建和编译它们。研究他们的源代码
启动的基本提示(如果找不到命令,则需要安装提供它的软件包)在命令行中(在终端中)。
运行emacs
;有一个教程菜单;练习半小时。
修改helloworld.c
计划(main
调用某个hello
功能)
用gcc -g -Wall helloworld.c -o helloworld
编译;改进你的代码直到没有给出警告。始终将-Wall
传递给gcc
或g++
以获取几乎所有警告。
使用./helloworld
使用gdb ./helloworld
调试,然后
help
命令b main
命令在main
中添加断点,同样为hello
函数添加断点。gdb
r
下运行它
bt
获取回溯p
打印一些变量c
继续执行已调试的程序。写一个小Makefile
,以便能够使用helloworld
构建您的make
计划
了解如何从Emacs内部致电make
(M-x compile
}和gdb
(M-x gdb
}
了解有关valgrind的更多信息(以检测大多数内存泄漏)。也许可以考虑在某些应用程序中使用Boehm's GC。
答案 1 :(得分:3)
你需要学习很多东西。我不会给你详细信息,但作为一个已经完成unix和c / c ++开发几十年的人,我现在会尝试给你一些主题。
我的主要建议是开始尝试。用C或C ++编写最简单的程序(打印“Hello there,world!”是传统的),并弄清楚如何从命令行编译和运行它。然后,一旦你有一个编译版本,在调试器下启动它,并使用断点,打印表达式等等。一旦你有这个最简单的程序启动并运行,你有点理解调试器是什么告诉你,添加一个类,函数,结构或其他任何感觉像是一个很好的小步骤,然后再次循环。与开始使用非常大的程序相比,这种方式的进行速度要快得多。
仍然处于非常高的水平,这里有一些主题,你需要至少弄清楚一点。请注意,“通过小型学习”方法适用于以下任何主题。
g++
:它在命令行语法方面有很好的在线文档,虽然你最初会发现它令人生畏,但试着寻找最简单的起点。Vim
和emacs
是传统的(非常强大)但两者都有相对陡峭的学习曲线。如果你周围有人帮助你,那就更好了。还有其他选择,但作为emacs
用户自己,我担心我对它们并不熟悉。gdb
。它是理解您的程序的一个非常强大的工具。同样,它有广泛的在线文档,将回报仔细阅读。ls
,cd
以及导航unix目录的移动基础知识; grep
用于快速搜索源文件。如果您的项目是多文件的,特别是如果它是一个完整学期的项目,您可能还会考虑学习以下主题。
Make
是一个用于描述如何编译和链接多文件项目的工具,这样您就不必每次都记住如何手动完成。遗憾的是,Make
因使用起来很棘手而享有当之无愧的声誉,但在跨越多个目录的大型项目中,这种情况大多都是如此,并且在线可能有很好的简单示例。git
或hg
,即使对于一些相对较小的项目也是如此。拥有已完成版本的存档版本更加安全,以便您可以快速备份。对于一个小型的一次性项目,git
和hg
都是过度的,但它们值得自学。我今天理解的传统智慧是它们在哲学和核心功能方面非常相似,但hg
在命令行级别上肯定更加一致,因此更容易入手。我怀疑这是相当令人生畏的,特别是如果你以前实际上没有接触到unix命令环境。我再次强调我上面的第一条建议:通过简单和实验来学习。这可以最大限度地减少您在任何给定时间点缠绕头部的新东西的数量。