码迷,mamicode.com
首页 > 数据库 > 详细

gcc和gdb的基本操作

时间:2018-10-03 00:34:17      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:格式   预处理   yum   设置断点   操作   size   头文件   注释   生成   

gcc和gdb

yum


  • 在线安装软件,使用阿里云镜像站,OPSX
  • 选择你安装的系统 点帮助 查看配置命令行
  • yum --list | grep gdb #查找要安装的软件
  • yum install -y gdb #不需要确认安装软件

gcc


1. 预处理 .i文件
  • -E 预处理
  • -o 指定输出文件名
    例 : gcc -E hello.c -o hello.i
  • 作用 :
    1. 干掉注释
    2. 宏替换
    3. pragma 不替换
    4. 加入很多行号信息,用于报错和警告使用
2. 编译 .s 文件
  • -S 编译
    • 例 : gcc -S hello.i 自动生成hello.s文件
  • 作用 :
    1. 词法分析
    2. 语法分析
    3. 语义分析
    4. 优化
3. 汇编 .o文件
  • -c 汇编
    • 例 : gcc -c hello.s 自动生成hello.o文件
  • ELF格式文件
    • readelf -h 查看elf头文件
    • nm 从目标文件中解析出文件符号信息
    • objdump -dS 反汇编
    • strip 删除文件符号信息 相当于给文件瘦身
4. 链接
  • 例 : gcc hello.o 生成a.out文件 不需要加任何选项
  • 作用:将外部代码加入到我们的程序中,加上启动代码。
优化级别 :
    o0  缺省
    o1
    o2
    o3
    -Wall  显示所有的警告信息
    -w  屏蔽所有警告信息

gdb

  • 编译时加上 -g 选项 加入调试信息 gdb a.out
    l (list)   :  显示源码10行
    l  行号  :从指定行显示10行
    直接回车  :  执行上次输入的指令
    l  函数名  :  显示函数体
    b (breakpoint)  行号 :  在程序的指定行设置断点
    b 行号 if 变量 == n  : 按条件设置断点  当变量为N时中断
    i b (info breakpoint) : 查看设置的断点
    注意:设置断点不要设置在空行和函数名上,不然容易设置不上
    r (run) : 运行程序
    n (next)  :  下一步,遇到函数不进入
    s (step)  :  下一步,遇到函数进入函数内部
    finish  :  结束当前函数,返回到函数调用的地方
    print 变量 :  打印变量的值
    whatis  变量/函数 :  查看变量/函数的类型
    d (delet) 断点编号 :删除第几个断点

调试段错误

  1. 编译时加上-g选项
  2. ulimit -a 查看系统资源限制
    ulimit -c unlimited 更改core file size 为 unlimited 用来保存段错误
  3. 运行a.out产生core文件
  4. gdb a.out core

gcc和gdb的基本操作

标签:格式   预处理   yum   设置断点   操作   size   头文件   注释   生成   

原文地址:https://www.cnblogs.com/YeLing0119/p/9738648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!