zoukankan      html  css  js  c++  java
  • 01_c语言学习之gcc

    gcc常用语法

    -c:只激活预处理,编译,和汇编,也就生成obj文件 .o
    -S:只激活预处理和编译,就是指把文档编译成为汇编代码。
    -E:只激活预处理,不生成文档,需要把他重定向到一个输出文档里。
    -o:定制目标名称,缺省的时候gcc 编译出来的文档是a.out
    -ansi:关闭gnu c中和ansi c不兼容的特性,激活ansi c的专有特性。
    -Dmacro:相当于C语言中的#define macro
    -Dmacro=defn:相当于C语言中的#define macro=defn
    -Umacro :相当于C语言中的#undef macro
    -Idir:指定头文件路径。
    -llibrary:指定库
    -Ldir:定制编译的时候,搜索库的路径。
    -g:指示编译器,在编译的时候,产生调试信息。
    -static:此选项将禁止使用动态库,所以,编译出来的东西,一般都很大。
    -share:此选项将尽量使用动态库,所以生成文档比较小,但是需要系统由动态库。
    -Wall:会打开一些很有用的警告选项,建议编译时加此选项。
    -std:指定C标准,如-std=c99使用c99标准,-std=gnu99,使用C99 再加上 GNU 的一些扩展。编一是要放在-o的前面使用

    优化选项:
    -O0 -O1 -O2 -O3:编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
    一般选择O2使用,在小写的O的前面出现 gcc -O -o bin/hello src/hello.c

    文件的工程化管理:

    bin: c的可执行文件
    include: 自己定义的头文件
    obj: .o 的目标文件
    src: c 语言源文件

    options常用编译选项:

    .错误与告警选项

    -Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。

    -pedantic 允许发出ANSI/ISO C标准所列出的所有警告

    -pedantic-errors 允许发出ANSI/ISO C标准所列出的错误

    -werror 把所有警告转换为错误,以在警告发生时中止编译过程

    -w 关闭所有警告,建议不要使用此项


    gcc -Wall -o bin/hello src/hello.c -----------重要以后要常用

    options制作库文件选项:

    -L dir :在库文件的搜索路径列表中添加dir 目录

    -static: 链接静态库

    -lname: 连接名为name的库文件

    -shared 表明是使用共享库


    gdb调试器 作用: 调试错误


    gdb常用语法:

    gdb调试的是最终的可执行文件,所以必须要先对原文件进行编译

    1 gcc -g 其它选项 文件名
    2 gdb 可执行文件(路径+文件名) //调试可执行文件,自动进入调试界面


    l(list) 查看所在入的文件
    b(break) 设置断点, 程序运行到断点即可停止


    break 函数名

    break 行号

    break 文件名:函数名

    break 文件名:行号

    break +偏移量

    break -偏移量

    break *地址

    info b : 查看设置的断点情况
    r (run)从第一行开始运行代码或者指定行开始, 可在r后面加上行号
    p n : 查看变量n的值
    n(next) 单步运行下一行代码(遇到函数不会进入函数)
    s(step) 单步运行下一行代码(遇到函数会进入函数)
    c(countinue): 恢复程序的运行,执行剩余的程序


    删除断点通过命令包括:

    delete <断点id>:删除指定断点

    delete:删除所有断点

    clear

    clear 函数名

    clear 行号

    clear 文件名:行号

    clear 文件名:函数名

    quit 退出

    示例:

    gcc -g -o bin/sum src/sum.c
    gdb bin/sum
    (gdb ) //正常进入到gdb的时候,在左侧会出现gdb,说明正常进入了
    (gdb) l //输出的是文本形式的输出从第一行开始看, 回车键查看下面的文档
    (gdb) l 28 查看行号28上下10行左右的代码
    (gdb) r 运行程序
    (gdb) b 22 给第22行设置断点
    Breakpoint 1 at 0x40052a: file src/day_1_helloword.c, line 22.
    (gdb) info b 查看断点
    (gdb) b main 给函数main设置断点
    Note: breakpoint 1 also set at pc 0x40052a.
    Breakpoint 2 at 0x40052a: file src/day_1_helloword.c, line 26.
    (gdb) info b 查看断点
    Num Type Disp Enb Address What
    1 breakpoint keep y 0x000000000040052a in main at src/day_1_helloword.c:22
    2 breakpoint keep y 0x000000000040052a in main at src/day_1_helloword.c:26
    (gdb) r 运行
    Starting program: /home/xyy/c/c_pro/chapter2/bin/hello1

    Breakpoint 1, main () at src/day_1_helloword.c:26
    26 printf("hello,word!!! ");
    (gdb) c 碰到第一个断点, c 继续执行
    Continuing.
    hello,word!!!
    [Inferior 1 (process 5074) exited normally]
    (gdb)p 变量名 //查看变量的值


    disassemble main 查看汇编代码

  • 相关阅读:
    prometheus基础概念
    Prometheus告警处理
    什么是prometheus?
    Prometheus的PromQL
    Prometheus的Exporter详解
    leetcode unique path I&&II
    leetcode Palindrome Partitioning
    leetcode 最大子矩阵(5星推荐)
    leetcode Sum Root to Leaf Numbers 二叉树所有叶节点的路径和
    leetcode Spiral Matrix I
  • 原文地址:https://www.cnblogs.com/sd-xyy/p/12797435.html
Copyright © 2011-2022 走看看