当前位置:   article > 正文

Linux代码调试----gdb使用介绍_gdb debug

gdb debug

目录

一、简介

二、gdb使用流程:

 (1)gdb的启动

 (2)调试中查看源代码

(3)开始调试


一、简介

GDB 全称“GNU symbolic debugger”,是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。所以对于一名Linux下工作的c/c++程序员,对gdb的了解是必不可少的。

二、gdb使用流程:

首先,我们现在Linux下写一个简单的c程序:

 

 然后通过 gcc code.c -o test -g   编译该程序,-g使该编译后的文件是debug的,可以进行调试,不然默认情况下,gcc编译的文件是release的,无法进行调试。

 (1)gdb的启动

指令:

gdb +被调试文件的文件名      #进入调试

quit         #退出调试

输入gdb test 就可以直接对我们之前编译后的test文件进行调试,如果想退出调试,输入quit。 

 (2)调试中查看源代码

指令:

list 或 l 0      # 注意l是小写的“L”。Gdb会记录最近一次命令,所以输入一次后可以直接回车

                        继续显示,执行一次显示10行,显示完所有代码后会有提示。

(3)开始调试

指令:

r     #开始调试该代码,如果每有打断点会直接运行结束

 

 在没有打断点,调试程序就会直接从头到尾运行,所以,打断点就需要用到:

指令:

b+行号      #对代码中的某行打断点

info + b    #查看我们所打的断点位置

打断点并调试: 

 

 查看断点:

 当我们运行到断点位置后,想要像在编译器上调试一样,进行逐语句、逐过程进行调试,可以用:

指令:

n           #逐过程调试,相当于F10

s           #逐语句调试,相当于F11

 

我这里后面没有新写函数,所以n和s都是一句一句的调用了,但n和s的使用是没问题的。 

如果我们想查看调试过程中的变量的值的变化,我们可以用:

指令:

 p + 变量名      #在调试的过程中显示该变量的变化

 新写了一段简单代码来举例:

这样是不是很麻烦呢,可不可以让他一直显示呢?当然是可以啦,我们这时需要用到:

指令:

display + 变量名      #随着调试的进行常显示该变量。

undisplay + 编号      #取消该编号对应的变量常显示。 

 注意:取消常显示是的指令对象是编号不是变量名。编号就是每一次变量显示值前面的那个数

在调试的过程中,如果有多个断点,我们运行到一个断点后,想要运行到下一个断点,可以用:

指令

c       #运行到下一断点处 

  

 如果我们想要删除某个断点,可以用:

指令:

d  + 编号      #编号是我们在info指令下查看的断点编号。

 这里删除的断点编号,不能是我们打断点的行号,不然会删除失败或删错:

(4)线程相关的调试

$  info threads                 // 显示当前程序处于哪一个线程中

 $ t 线程id   // 切换到指定线程执行

$ set scheduler-locking on   // 锁定, 在当前线程下执行,不会被其他线程抢占CPU,直到该线程运行完成。

$ disassemble          // 解析汇编指令, 显示当前接下来要执行的汇编指令

$ ni                // 执行汇编下一条汇编指令

 如果对你有用就支持一下吧,如果有什么问题,欢迎提出来哦。谢谢阅读!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/742382
推荐阅读
相关标签
  

闽ICP备14008679号