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的基本操作的更多相关文章

  1. CentOS下安装gcc和gdb

    我的操作系统是CentOS6.4,安装源里自带了gcc4.4.0和gdb7.0,版本略老遂删除之重新安装. gcc 1.下载源码包,解压 //下载 wget http: //ftp.gnu.org/g ...

  2. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  3. Linux gcc和gdb程序调试用法 {转}

    gcc一般调试格式: gcc -Wall -o  test   test.c // -wall  显示程序错误详细信息      gcc -v  // 显示gcc的版本 gcc -o{1,2,3} t ...

  4. 【学习总结】gcc和gdb

    目录 <> vim.gcc.gdb: gcc: gcc和g++是c/c++的linux系统集成的编译器,源文件的后缀应为 .C/.cpp/.c++/.cc等 编译器可以将C.C++等语言源 ...

  5. 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)

    第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...

  6. Linux 之 GCC 和 GDB

    1  GCC = GNU C Compiler 1)  pre-processing (预处理) $ gcc -E -o hello.i hello.c // -E 预处理后停止 2)  compil ...

  7. Linux下gcc与gdb简介

    gcc编译器可以将C.C++等语言源程序.汇编程序编译.链接成可执行程序.gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具. linux下没有后缀名的概念.但 gcc 根据文件的后 ...

  8. gcc与gdb版本兼容问题

    今天在用gdb调试C++程序的时候,想用"p i”命令打印出程序的一个局部变量i,却一直提示: No symbol "i" in current context. 我愣了 ...

  9. Vim与GCC和gdb完美组合

    一.vim vim修改一下配置文件后,如果你稍微会点vim的命令使用,那可比一般的编辑器好用啊,如果一点不会vim的命令使用,就跟一般编辑器一样使用. 打开etc/vim/vimrc文件 这里的引号是 ...

随机推荐

  1. Python类私有方法的陷阱

    引言 Python不像C++.Java.C#等有明白的公共.私有或受保护的keyword来定义成员函数或属性,它使用约定的单下划线"_"和"__"双下划线作为函 ...

  2. 浏览器的多线程和js的单线程--前端易混淆知识科普(一)

    问题:js是单线程的,页面是从上往下加载的,那么是不是第一个js没加载完成,第二个js就不加载?然后,引申出来一个问题就是,那css和图片呢?这之间的加载有相互影响吗? 1.什么是线程?什么是进程?什 ...

  3. Android Studio报错:DefaultAndroidProject : Unsupported major.minor version 52.0

    今天使用Android Studio 2.0打开我之前的项目时,编译报了如下错误: Error:Cause: com/android/build/gradle/internal/model/Defau ...

  4. Codeforces--631A--Interview(位运算)

     Interview Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:262144KB     ...

  5. 利用SSL For Free工具3分钟获取Let's Encrypt免费SSL证书

    https://www.sslforfree.com/

  6. [Swift通天遁地]六、智能布局-(2)视图对象的尺寸和位置相对约束

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. flask web 表单验证 WTForms

    简介 WTForms 是一个flask集成框架,或者说是库,用于处理浏览器表单提交的数据,它在flask-WTF的基础上扩展并添加了一些随手可得的精巧帮助函数,这些函数将会是在flask里使用表单更加 ...

  8. cocos2d-x 调用第三方so文件

    一:假设.so文件名称 : libhi.so 1.jni文件下创建一个prebuilt 2.android.mk文件中找到  include $(CLEAR_VARS), 在这句后面添加如下代码 in ...

  9. Java常用类库(二):Iterator迭代器和子范围视图

    今天介绍集合类的以下内容: l  Iterator迭代器 l  子范围视图简介 Iterator迭代器: 应该将java迭代器认为是位于两个元素之间, 当调用next 时,迭代器就越过下一个元素,并返 ...

  10. 《Java编程的逻辑》第三部分 泛型与容器