Ubuntu下编译第一个C程序的成功运行
对于每个新手来说,进入Ubuntu最想做的事莫过于在终端(Terminal)里运行自己的第一个C/C++程序”hello.c/hello.cpp”了。
很多语言书籍都是默认搭载好运行环境的,而Ubuntu默认是不包含编辑器vim和编译器gcc。假设你和我一样,展现在自己眼前的是一台刚安装好的Ubuntu电脑,下面我们将来实现自己的第一个程序。
1.准备工作
1.1 打开控制台:使用快捷键 Ctrl + Alt + T;
1.2 安装vim:输入 sudo apt-get install vim;
1.3 安装gcc:输入 sudo apt-get install g++。
2.编写hello.c源代码
2.1 新建文件名为hello.c的源文件:输入vim hello.c;
2.2 键入i 进入insert模式(即编辑输入模式),写入如下经典代码:
//the first program hello.c
#include
int main(void)
{
printf("Hello, world!\n");
return 0;
}
2.3 输入完成后,Esc 回到normal模式,键入:wq 保存退出vim。
3.编译hello.c
在终端执行 g++ hello.c -o hello 编译。
4.运行程序hello
./hello 就看到结果:
Hello,world!
aptitude show xxx
如果没有安装aptitude,首先要对其进行安装
sudo apt-get install aptitude
查询软件版本,结果显示如下:
也可用apt-show-versions (要先安装sudo apt-get install apt-show-versions)
dpkg -L xxxx
dpkg -l | grep filename
假设需要调试的文件名为:main.c,然后切换到此文件所在目录,用GCC编译之:首先对程序进行编译,命令形式如下:
gcc main.c -o main -g
在上面的命令行中,使用 -o 参数指定了编译生成的可执行文件名为main,使用参数 -g 表示将源代码信息编译到可执行文件中。如果不使用参数 -g,会给后面的GDB调试造成不便。当然,如果我们没有程序的源代码,自然也无从使用 -g 参数,调试/跟踪时也只能是汇编代码级别的调试/跟踪。
输入gdb命令,打开gdb软件
gdb |
(gdb) file main |
(gdb) Reading symbols from gdb-sample…done. |
(gdb) Breakpoint 1 at 0x4009d6: file main.c, line 12. |
(gdb) b 65 |
(gdb) r |
(gdb) p buff |
为了更简明,有必要先删除目前所有断点(使用“d”命令——Delete breakpoint):
(gdb) d (Delete all breakpoints? (y or n) y (gdb) |
(gdb) n <——————— 单条语句执行,next命令简写。
(gdb) n |
退出程序选择”q”
(gdb) q |
默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。
follow-fork-mode | detach-on-fork | 说明 |
parent | on | 只调试主进程(GDB默认) |
child | on | 只调试子进程 |
parent | off | 同时调试两个进程,gdb跟主进程,子进程block在fork位置 |
child | off | 同时调试两个进程,gdb跟子进程,主进程block在fork位置 |
设置方法:set follow-fork-mode [parent|child] set detach-on-fork [on|off]