gcc和gdb的基本操作
gcc和gdb
yum
- 在线安装软件,使用阿里云镜像站,OPSX
- 选择你安装的系统 点帮助 查看配置命令行
- yum --list | grep gdb #查找要安装的软件
- yum install -y gdb #不需要确认安装软件
gcc
1. 预处理 .i文件
- -E 预处理
- -o 指定输出文件名
例 : gcc -E hello.c -o hello.i - 作用 :
- 干掉注释
- 宏替换
- pragma 不替换
- 加入很多行号信息,用于报错和警告使用
2. 编译 .s 文件
- -S 编译
- 例 : gcc -S hello.i 自动生成hello.s文件
- 作用 :
- 词法分析
- 语法分析
- 语义分析
- 优化
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) 断点编号 :删除第几个断点
调试段错误
- 编译时加上-g选项
- ulimit -a 查看系统资源限制
ulimit -c unlimited 更改core file size 为 unlimited 用来保存段错误 - 运行a.out产生core文件
- gdb a.out core
gcc和gdb的基本操作的更多相关文章
- CentOS下安装gcc和gdb
我的操作系统是CentOS6.4,安装源里自带了gcc4.4.0和gdb7.0,版本略老遂删除之重新安装. gcc 1.下载源码包,解压 //下载 wget http: //ftp.gnu.org/g ...
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- Linux gcc和gdb程序调试用法 {转}
gcc一般调试格式: gcc -Wall -o test test.c // -wall 显示程序错误详细信息 gcc -v // 显示gcc的版本 gcc -o{1,2,3} t ...
- 【学习总结】gcc和gdb
目录 <> vim.gcc.gdb: gcc: gcc和g++是c/c++的linux系统集成的编译器,源文件的后缀应为 .C/.cpp/.c++/.cc等 编译器可以将C.C++等语言源 ...
- 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)
第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...
- Linux 之 GCC 和 GDB
1 GCC = GNU C Compiler 1) pre-processing (预处理) $ gcc -E -o hello.i hello.c // -E 预处理后停止 2) compil ...
- Linux下gcc与gdb简介
gcc编译器可以将C.C++等语言源程序.汇编程序编译.链接成可执行程序.gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具. linux下没有后缀名的概念.但 gcc 根据文件的后 ...
- gcc与gdb版本兼容问题
今天在用gdb调试C++程序的时候,想用"p i”命令打印出程序的一个局部变量i,却一直提示: No symbol "i" in current context. 我愣了 ...
- Vim与GCC和gdb完美组合
一.vim vim修改一下配置文件后,如果你稍微会点vim的命令使用,那可比一般的编辑器好用啊,如果一点不会vim的命令使用,就跟一般编辑器一样使用. 打开etc/vim/vimrc文件 这里的引号是 ...
随机推荐
- LeetCode 206. Reverse Linked List (倒转链表)
Reverse a singly linked list. 题目标签:Linked List 题目给了我们一个链表,要求我们倒转链表. 利用递归,新设一个newHead = null,每一轮 把下一个 ...
- 【cocos2dx 小技巧】半透明屏蔽罩和弹出框的实现
今天介绍一下,弹出框的和屏蔽罩的小实现~ 弹出框主要用到了cocos2dx生命周期里面的OnEnter()函数,就是当Layer被addChild的时候会调用的函数(所以假设把OnEnter的代码加到 ...
- POJ2393 Yogurt factory 【贪心】
Yogurt factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6821 Accepted: 3488 De ...
- oc81--copy内存管理
// // main.m // Copy内存管理(MRC才有内存管理) // #import <Foundation/Foundation.h> int main(int argc, co ...
- android kl 文件的作用【转】
本文转载自:http://blog.csdn.net/u013308744/article/details/49274069 首先看touchscreen的kl文件 # Copyright (c) 2 ...
- luogu 1045 麦森数
题目大意: 从文件中输入P(1000<P<3100000),计算2^P−1的位数和最后500位数字(用十进制高精度数表示) 思路: 一道高精度练习题 其中位数是一个结论 位数=[P*log ...
- Luogu1275魔板
https://zybuluo.com/ysner/note/1136271 题面 有这样一种魔板:它是一个长方形的面板,被划分成\(n\)行\(m\)列的\(n*m\)个方格.每个方格内有一个小灯泡 ...
- luoguP2939 [USACO09FEB]改造路Revamping Trails
约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 速公路. ...
- 解决 EF where<T>(func) 查询的一个性能问题
前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了 ...
- Akka源码分析-local-DeathWatch
生命周期监控,也就是死亡监控,是akka编程中常用的机制.比如我们有了某个actor的ActorRef之后,希望在该actor死亡之后收到响应的消息,此时我们就可以使用watch函数达到这一目的. c ...