zoukankan      html  css  js  c++  java
  • 嵌入式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,支持不同的语言等等......

  • 相关阅读:
    古谚、评论与论断、名篇与名言
    重读《西游记》
    重读《西游记》
    命名之法 —— 时间、季节、地点
    命名之法 —— 时间、季节、地点
    文言的理解 —— 古时的称谓、别称、别名
    文言的理解 —— 古时的称谓、别称、别名
    Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
    瀑布 敏捷 文档
    POJ 1325 ZOJ 1364 最小覆盖点集
  • 原文地址:https://www.cnblogs.com/codercql/p/12637699.html
Copyright © 2011-2022 走看看