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

  • 相关阅读:
    POJ3233]Matrix Power Series && [HDU1588]Gauss Fibonacci
    [codeforces 508E]Maximum Matching
    [SDOI2011]染色
    [CSU1806]Toll
    [HDU4969]Just a Joke
    [HDU1071]The area
    [HDU1724]Ellipse
    [VIJOS1889]天真的因数分解
    [BZOJ3379] Turning in Homework
    [BZOJ1572] WorkScheduling
  • 原文地址:https://www.cnblogs.com/codercql/p/12637699.html
Copyright © 2020-2023  润新知