嵌入式Linux编译器 gcc、gdb

GCC(GNU Compiler Collection)是编译器的集合

gcc:GCC中C编译器

gcc编译过程:预处理(Preprocessing)编译(Compilation)汇编(Assenmbly)链接(Linking)

gcc相当于顶层的管理器, gcc本身并不参与编译的过程。预处理的时候gcc调用cpp预处理,链接时候gcc调用ld链接。所以程序可以实现分布编译。

gcc支持的文件:

  • .c       C源程序
  • .C      C++源程序
  • .cc     C++源程序
  • .cxx   C++源程序
  • .m     Objective C源程序
  • .i        经过预处理的C源程序
  • .ii       经过预处理的C++源程序 
  • .s       汇编语言源程序
  • .S      汇编语言源程序
  • .h       头文件
  • .o       目标文件
  • .a       存档文件

gcc基本用法: gcc [option] file...   

  • 如果没有给出可执行文件名字,GCC将自动生成一个a.out文件
  • -o    将.c预处理、汇编、编译并链接形成可执行文件   (gcc hello.c -o hello)
  • -E    将test.c预处理输出test.i文件  (gcc -E hello.c -o hello.i)
  • -S    将预处理输出文件test.i汇编成test.s文件  (gcc -S hello.c -o hello.s)
  • -c     将汇编输出文件test.s编译输出test.o文件  (gcc -c hello.c -o hello.o)
  • -O    使用编译优化级别1编译程序。级别为1-3,级别越大优化效果越好,但编译时间越长(-O1、-O2、-O3)
  • -g     产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,就必须加入这个选项

验证一下:

 预处理是宏替换和头文件替换,所以会导致程序变长。

 

 

执行:在当前目录下执行程序

  • ./hello       执行当前目录下的hello文件

gcc -v    查看gcc版本信息

警告:-Wall        (warning,all)

gdb调试程序:首先  gcc -g hello.c -o hello  然后  gdb hello 

  • quit  退出gdb
  • l(list)查看源代码
  • b(break)设置断点 。 b 6 断点设置在第6行;b getlim  以函数名设置断点;
  • run 执行程序  (ctrl+c 中断执行)
  • p(print)查看变量值
  • c(continue)  继续依次执行,在断点处停下
  • step (step into )只执行一行语句,进入函数内部
  • next (step over)单步执行,但是不进入函数内部,把函数整体当做一个语句
  • finish (step out )当前程序执行完,跳出
  • disable   断点失效
  • enable    恢复断点
  • delete 删除第几个中断点
  • clear  通过指定行号或函数名删除断点

 gdb还有很多实用的命令,深入底层debug,支持不同的语言等等......

猜你喜欢

转载自www.cnblogs.com/codercql/p/12637699.html