• 嵌入式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,支持不同的语言等等......

  • 相关阅读:
    稀疏自编码器一览表
    ZOJ 3886 Nico Number(筛素数+Love(线)Live(段)树)
    K好数(DP)
    【BZOJ4025】二分图
    又一次认识java(七) ---- final keyword
    二分查找
    从朴素贝叶斯分类器到贝叶斯网络(下)
    最近感到深深的绝望,感觉自己太菜了
    leetcode No.19 删除链表的倒数第N个节点 (python3实现)
    leetcode No.94 二叉树的中序遍历 (python3实现)
  • 原文地址:https://www.cnblogs.com/codercql/p/12637699.html
Copyright © 2020-2023  润新知