目录:
- 一.背景
- 二.使用
-
- 1.调试可执行程序(debug版本)
-
- • 进入调试界面 :gdb [可执行程序]
- • 查看源代码:l(list)
- • 打断点:b [源码文件当中的行号]
- • 查看断点信息:i b (info breakpoints)
- • 去除断点:delete [断点的序号]
- • 使断点失效:disable [断点的序号]
- • 使断点生效:enable [断点的序号]
- • 使程序运行:r(run)
- • 逐过程执行,对标win当中的F10,执行的命令是:n(next)
- • 逐语句执行,对标win当中的F11,执行的命令是:s(step)
- • 继续执行:c(遇到下一个断点的时候就会停止执行)
- • 打印变量的值:p [变量名称]
- • 退出:q (quit) 或 ctrl + d
- • 注意:开始执行gdb命令的时候,可以直接回车执行上一次的命令
- 2.调试coredump文件
一.背景
• 程序的发布方式有两种:debug版本和release版本
=》debug:是程序的一个调试版本,增加了一些调试信息,这些调试信息,可以帮助程序员调试代码
=》release:是程序的发布版本,客户一般拿到的是这个版本,这个版本相对于debug版本编译器在编译的时候做了优化,程序运行更快
• Linux 操作系统下,默认在编译的时候生成的是release版本;如果想要生成debug版本,在编译的时候需要增加"-g"命令行参数
如上图所示release版本下aa文件和debug版本下bb文件运行结果是相同的,但bb文件大小比aa大,因为debug版本增加了调试信息
二.使用
1.调试可执行程序(debug版本)
• 进入调试界面 :gdb [可执行程序]
• 查看源代码:l(list)
若代码过长可能只会展示一部分,继续按l可继续展示
• 打断点:b [源码文件当中的行号]
• 查看断点信息:i b (info breakpoints)
• 去除断点:delete [断点的序号]
• 使断点失效:disable [断点的序号]
断点本质上还是在的,但是程序在执行的时候就不会停留在失效的断点处
• 使断点生效:enable [断点的序号]
• 使程序运行:r(run)
• 逐过程执行,对标win当中的F10,执行的命令是:n(next)
逐过程不会进入到被调用函数内部执行
• 逐语句执行,对标win当中的F11,执行的命令是:s(step)
逐语句会进入到被调用函数内部执行
• 继续执行:c(遇到下一个断点的时候就会停止执行)
• 打印变量的值:p [变量名称]
p [变量名称]:不仅仅局限于普通变量,还可以打印指针变量,还可以打印对象
• 退出:q (quit) 或 ctrl + d
• 注意:开始执行gdb命令的时候,可以直接回车执行上一次的命令
2.调试coredump文件
前提:本质上是在调试程序崩溃之后的内存镜像文件(core size)
以如下错误为例说明
产生coredump文件的条件:
(1)linux操作系统当中,需要设置core size的大小
ulimit -c查看core file size 的大小
ulimit -a查看所有的
(2)磁盘大小
Segmentation fault(段错误):内存访问越界或者访问空指针导致的
内存镜像文件保存的是程序在崩溃的一瞬间内存当中的值
调试coredump文件:gdb [可执行程序][coredump文件]
tips:
11号信号:解引用空指针,解引用野指针,越界访问内存
6号信号:double free