vim+gcc+gdb使用合集
You have to believe in yourswlf when no one else does-that makes you a winner right there--------你必须在没有人相信你时相信自己,这能使你成为赢家。
这篇博客是小黑总结出来查询用的功能文档,适合已经对Linux系统有所了解的小白,喜欢的同学可以收藏。希望能帮到大家提高效率。
一, vim常用命令
命令/编辑模式切换
[i/ESC]
- 以下操作都是在esc模式下的
以上都是本人经常用到的命令,也是比较实用的命令。
如果vim只是具有这些基本功能那早就被扔到历史的长河中去了。
vim配置以及插件也能帮助我们更有效率的写代码
有兴趣的可以参考这个博客:
(http://blog.csdn.net/freeking101/article/details/62037015)
二, gcc基本用法
gcc 其实像keil ,IDLE, eclipse这样的平台,集成了很多功能。
C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
编译的完整过程:
C源程序.c--------->预编译处理
.i------------------>编译、优化程序
.s、.asm---------->汇编程序
.obj、.o、.a------>链接程序
.exe、.elf、.axf等
这部分小黑另外写一篇博客介绍,以下只列出常用。
https://blog.csdn.net/weixin_46027505/article/details/105222904
选项 | 说明 | 举例 |
---|---|---|
-E | 只进行预处理,不编译 | gcc -E hello.c -o hello.i |
-S | 只编译,不汇编 | gcc -S hello.i > hello.s |
-c | 只编译、汇编,不链接 | gcc -c hello.s -o hello.o |
-g | 编译生成可执行文件包含gdb调试信息,可被gdb调试 | gcc -g hello.c |
-o | 指定编译生成可执行文件名 | gcc hello.c -o hello |
-I(大写 i) | 指定include包含文件的搜索目录,就是指出头文件所在路径 | |
-L | 指定链接所需库(动态库或静态库)所在路径 | |
-l(小写的 L) | 指定所需链接库的库名 | |
-ansi | ANSI标准 | |
-std=c99 | C99标准 | |
–static | 静态编译 | |
-static | 静态链接 | gcc hello.o -o hello -static |
-
下面的不常用就不列在表中,另外优化还容易出现错误,不建议使用
-Werror 不区分警告和错误,遇到任何警告都停止编译
-Wall 开启大部分警告提示
-O0 关闭所有优化选项 -O1 第一级别优化,使用此选项可使可执行文件更小、运行更快,并不会增加太多编译时间,可以简写 为-O
-O2 第二级别优化,采用了几乎所有的优化技术,使用此选项会延长编译时间
-O3 第三级别优化,在-O2的基础上增加了产生inline函数、使用寄存器等优化技术
-Os 此选项类似于-O2,作用是优化所占用的空间,但不会进行性能优化,常用于生成终版本 -
对列表里空白部分小黑在制作动态库中有运用:
https://blog.csdn.net/weixin_46027505/article/details/105223248
三, gdb基本使用
GDB调试GDB 是*软件基金会(Free Software Foundation)的软件工具之一。它的作用是协助程序员找到代码中的错误。如果没有GDB的帮助,程序员要想跟踪代码的执行流程,唯一的办法就是添加大量的语句来产生特定的输出。但这一手段本身就可能会引入新的错误,从而也就无法对那些导致程序崩溃的错误代码进行分析。
GDB的出现减轻了开发人员的负担,他们可以在程序运行的时候单步跟踪自己的代码,或者通过断点暂时中止程序的执行。此外,他们还能够随时察看变量和内存的当前状态,并监视关键的数据结构是如何影响代码运行的。
gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令。
- 首先我们
gcc -g hello.c hello
//加入调试信息
- 然后
gdb -q hello
//加载hello,但是去掉繁琐的信息,版本信息啥的
也可以先
gdb
file hello
- 下面就是常用命令
命令 | 全称 | 解释 | 示例 |
---|---|---|---|
r | run | 运行被调试的程序,如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 | (gdb) r |
c | Continue | 继续执行被调试程序,直至下一个断点或程序结束。 | (gdb)c |
l | list | 列出源码 | list hello.c:5,10 |
b | Breakpoint | 设置断点。 | b 4 在第四行设置断点 |
i | Info的 | 用于显示各类信息,详情请查阅“help i” | i r |
i b | info breakpoints | 打印断断点信息 | i b |
i r | information register | 打印寄存器信息 | i r |
d | Delete breakpoint | 删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 | d 4 |
n | next | 执行一行源程序代码,此行代码中的函数调用也一并执行。相当于其它调试器中的“Step Over (单步跟踪) | n |
s | step | 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;相当于其它调试器中的“Step Into (单步跟踪进入) | s |
p | 显示指定变量(临时变量或全局变量)的值。 | (gdb) p i | |
q | Quit | 退出GDB调试环境 | (gdb) q |
- 最后还有几个命令挺好用的。
shell clear
//清屏help
//帮助信息,不加命令,列出全部
(gdb) help display如果不想删除断点可以使能和去能
disable 4
enable 4
还有一个概念:
条件断点:
当满足条件就中断程序运行,
命令:break line-or-function if expr。
例如:(gdb)break 666 if testsize==100