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<stdio.h>
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!
参考文档
- Ubuntu下编译C程序的详解 http://www.linuxidc.com/Linux/2012-11/73360.htm
- Ubuntu下编译和执行C程序 http://www.linuxidc.com/Linux/2009-10/22312.htm
- Linux下用GCC编写第一个C程序 http://www.linuxidc.com/Linux/2011-07/38415.htm
- 更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
- 本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-05/101844.htm
GDB调试
查询GDB软件版本
查看软件版本:
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
调试GDB
1、编译程序
假设需要调试的文件名为:main.c,然后切换到此文件所在目录,用GCC编译之:首先对程序进行编译,命令形式如下:
gcc main.c -o main -g
在上面的命令行中,使用 -o 参数指定了编译生成的可执行文件名为main,使用参数 -g 表示将源代码信息编译到可执行文件中。如果不使用参数 -g,会给后面的GDB调试造成不便。当然,如果我们没有程序的源代码,自然也无从使用 -g 参数,调试/跟踪时也只能是汇编代码级别的调试/跟踪。
2、打开GDB
输入gdb命令,打开gdb软件
gdb |
(gdb) file main |
(gdb) Reading symbols from gdb-sample…done. |
程序加载成功
###4、设置断点 使用“b”命令在 main 函数开头设置一个断点(Breakpoint):显示
(gdb) Breakpoint 1 at 0x4009d6: file main.c, line 12. |
(gdb) b 65 |
(gdb) r |
(gdb) p buff |
7、删除所有断点
为了更简明,有必要先删除目前所有断点(使用“d”命令——Delete breakpoint):
(gdb) d (Delete all breakpoints? (y or n) y (gdb) |
8、单条语句执行
(gdb) n <——————— 单条语句执行,next命令简写。
(gdb) n |
9、退出gdb
退出程序选择”q”
(gdb) q |
10、多进程调试
默认设置下,在调试多进程程序时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]