大家好,我是苏貝,本篇博客带大家了解Linux的编译器-gcc/g++,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- 1. 背景
- 2.使用
-
- (A) 进入gdb
- (B) quit/q:退出gdb
- (C) run/r:运行代码
- (D) list/l:查看debug模式的可执行文件的依赖文件的内容
- (E) b:打断点
- (F) info/i b:显示断点信息
- (G) disable 断点编号:使能关闭断点
- (H) enable 断点编号:使能打开断点
- (I) d/d 断点编号:删除断点
- (J) next/n:逐过程,F10
- (K) step/s:逐语句,F11
- (L) print/p a/&a:查看变量a内容/地址
- (M) display a/&a:一直查看变量a的值/地址
- (N) undisplay 编号:取消对a/&a的一直查看
- (O) continue/c:运行到下一个断点处
- (P) 运行结束所在函数后就停下来
- (Q) until:跳转到指定行,中间的代码都已执行
- (R)info/I locals:查看当前栈帧局部变量的值
1. 背景
程序的发布方式有两种,debug模式和release模式 。其中,debug模式可被调试(编译器形成可执行程序的时候会给可执行程序 添加调试信息, release模式不能被调试
Linux 中gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
如何证明由release变debug模式会添加调试信息呢?
(A) 看大小
先写出一个.c文件
再写出makefile的内容
Make生成mytest文件,它是可执行文件,是release模式的
修改makefile的内容
再生成mytest_debug文件,也是可执行文件,不过是debug模式的
我们发现,debug模式的文件大小大于release模式的
(B) 查看ELF格式的文件
readelf 命令,一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库( * .so)或者静态库(*.a) 等包含ELF格式的文件。