使用GDB进行断点调试

Posted 一代枭雄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用GDB进行断点调试相关的知识,希望对你有一定的参考价值。

1.断点类型

软件断点:由非法指令异常实现(软件实现)

硬件断点:由硬件特性实现(数量有限)

数据断点:由硬件特性实现(数量有限)

为什么要分软件断点和硬件断点呢?

软件断点通常是可以运行于内存中的程序,代码加载到内存中执行,那么软件断点就是有效的。

对于flash中的程序执行,软件断点就没有用了。此时必须依赖于硬件断点。

这就是软件断点和硬件断点使用上的不同。

软件断点:适用于运行于内存中的程序

硬件断点:适用于直接在flash中运行的程序。

数据断点:往往用来监视一段内存的,如果这段内存被访问了(读或写),程序的执行立即停下来,这就是数据断点。

2.软件断点的相关操作

—通过函数名设置断点

break func_name  [if var = value]

tbreak func_name [if var = value]

break和tbreak的差异:断点有效次数的差异

break设置的断点总是有效的(永久断点)

tbreak设置一次有效断点(一次性断点)

[if var = value],如果在打断点的时候,指明了这样的条件,那么该断点就变成了一个条件断点。条件断点只有在条件成立时,才能暂停程序的执行。

—通过文件名行号设置断点

break file_name : line_num [if var = value]

cbreak file_name : line_num [if var = value]

操作                                   命令

断点查看                           info breakpoints

断点删除                           delete 1 2  n

                                        delete breakpoints  删除所有断点

断点状态改变                    enable  1  2   n

                                        enable breakpoints

                                        disable 1  2  n

                                        disable breakpoints

3.调试中常用的操作

操作             命令

变量查看                                        print name

变量设置                                        set var name = value

执行下一行代码                             next

连续执行n行代码                           next n

执行进入函数                                 step

强制当前函数返回                          return [value] 以某个值返回当前函数

运行至当前函数返回                       finish 执行完当前所在的函数,然后暂停下来

执行至目标行                                 until line

跳转执行                                        jump line

以上是关于使用GDB进行断点调试的主要内容,如果未能解决你的问题,请参考以下文章

使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

GDB再学习:断点调试之硬断点

GDB再学习:断点调试之硬断点

GDB再学习:断点调试之事件断点

GDB再学习:断点调试之事件断点

GDB再学习:断点调试之数据断点