首页 > 代码库 > gcc与gdb的使用

gcc与gdb的使用

1.gcc/g++编译过程:

  gcc/g++的编译格式:

  gcc [option][filename]...

  g++ [option][filename]...

  1)processing:预处理过程,对文件中的文件包含,预编译语句进行处理,使用参数-E;

  2)compilation:调用cc进行编译,将输入文件编译成.s的汇编文件,使用参数-s;

  3)Assembly:调用as进行编译,将.S或.s文件编译成.o的目标文件,使用参数-c;

  4)Linking:在生成目标文件生进行连接,使用参数-o。

  后缀标识处理:

后缀语言处理
.cc语言预处理,编译,汇编
.Cc++语言预处理,编译,汇编
.ccc++语言预处理,编译,汇编
.cxxc++语言预处理,编译,汇编
.ic语言编译,汇编
.iic++语言编译,汇编
.s汇编语言汇编
.S汇编语言预处理,汇编

  一个简单的例子:(g++与gcc的用法相同)

  技术分享

  gcc -c hello.c (包含了-E,-s)编译源文件,生成目标文件:

  技术分享

  gcc -o hello hello.o连接,生成可执行文件hello:

  技术分享

  ./hello执行可执行文件hello

  技术分享

2.gdb的基本命令

  GDB是GNU发布的一个强大的Unix/Linux下的程序调试工具,可以完成如下调试功能:

  1)自定义运行程序;

  2)设置断点;

  3)动态设置程序运行变量值;

  4)程序的单歩执行。

  一个简单的例子:

  技术分享

  如果要用gdb进行调试程序,在编译时应该使用-g参数,生成可执行文件:

  gcc -g test.c -o test

  技术分享

  l(list的缩写,表示列出源码),l n 表示从第n行列出源码:

  技术分享

  break表示添加断点,break n 表示在第n行设置断点,break fun表示在函数入口设置断点,info breakpoints表示查看断点信息,可用delete删除断点:

  技术分享

  r(run)运行程序:

  技术分享

  n(next)运行下一行,c表示继续运行程序:

  技术分享

  p表示打印,p i表示打印变量i的值:

  技术分享

  bt查看堆栈,回车表示继续上一个命令:

  技术分享

  finish结束执行:

  技术分享

  q表示退出gdb。

 

gcc与gdb的使用