Linux: GDB 调试工具

 

目录

概念:

Linux 下 debug 和 release 的区别:

GDB 的使用 : 

激活和进入工作模式:

 查看文件的内容:

运行调试的文件: 

打断点: 

 查看断点:

删除断点:

禁用断点:

​编辑

重新打开断点:

 逐过程 与 逐语句:

查看变量/监视功能: 

常显示: 

运行至下一个断点:

转跳行数: 

停止运行:


概念:

Linux GDB(GNU Debugger)是一个功能强大的调试工具,用于调试C、C++等编程语言的程序。它可以帮助开发人员定位和修复程序中的错误。

换句话而言,GDB 的功能就和VS中的调试功能一样,可以对C、C++代码进行调试。

Linux 下 debug 和 release 的区别:

在linux 编译语言的过程中,我们一般会使用gcc 命令将文件编译成可执行文件,但是,在编译文件的过程中,编译的文件分为两种,分别是debug文件和release文件,对于两种文件而言,前者是面向编译者,后者是面向客户。

而Linux是一种面向对象的语言,所以在编译的过程中,gcc一般都是使用release 作为默认的编译。

release模式下 编译的文件 比 debug模式下 编译的文件 内存要更小  

使用 -g 将gcc的编译模式从release 转变成 debug 

GDB 的使用 : 

激活和进入工作模式:

gdb 需要调试的文件

由于 gdb 是Linux系统默认自带的,所以只需要输入以上指令 进行激活即可使用。

进入 gdb 的工作模式后,可以使用命令 quit 或者  q 即可退出gdb 的工作模式,也就是退出调试 

quit  //q

 查看文件的内容:

list  //l

在进入 gdb 的工作模式后,使用list 命令 或者 l 命令 可以对 需要调试的文件进行内容的查看。

不过需要注意的是,只需要list 命令,并不需要输入其他的内容,以下是错误的示范:

同时,可以看到,在使用list 命令后 文件展示的内容只有十行, 并不是全部,所以想要查看其他行的内容,则可以使用 命令 :  list 行号 或者  list 文件名 : 关键字   又或者 list 文件名 : 行号  对文件内容进行具体的查看

list  行号  // l 行号 

list 文件名 : 关键字  // l 文件名 :关键字 

list 文件名 : 行号 // l 文件名 : 行号

list 文件名 :关键字 

list 文件名 : 行号 

list 行号 

当然,如果想要查看全文,那么只要输入文件开头的行号,随后一直摁下回车即可。 

同时需要注意的是,输入行号并不是直接以哪一行开头,而是会出现哪一行的相关上下行。 

运行调试的文件: 

run  // r

使用 r 或者 run 命令 对调试文件进行运行! 

不过,r命令 的运行 是直接启动到结束,如果需要查看某段代码的内容,或者对代码进行逐句的调试,则需要使用断点命令。 

打断点: 

b 需要打断点的代码行数

 使用命令  b 行数 或者 b 文件名 : 行数 或者 b 文件名 :关键代码  即可打上断点。

 查看断点:

使用 i b 或者 info b 对 断点进行查看,且需要注意的是,如图上图所示,在每一个断点的最前端,都有一个编号,这个编号一但被某个断点占用,那么其他断点就不会使用这个编号!

且之后的删除断点也和断点编号有关! 

删除断点:

使用 d 断点编号 即可删除 断点,同时需要注意,断点不能连续删除!

禁用断点:

disable  断点编号

可以看到 矢能 end 从 y 变成了n 表示禁用了!同时还要记住空行打断点是没有用的!

重新打开断点:
 enable 断点编号 

 逐过程 与 逐语句:

使用 n 或者 next 进行调试的逐过程,相当于VS中的F10进行代码的调试,使用的步骤是先使用 r 命令 进入运行阶段后,因为断点的原因,在使用n 进行代码的调试。 

同时可以使用 s 命令 对代码进行逐语句的调试,相当于VS 中的F11 

查看变量/监视功能: 

使用p 命令可以对 代码 中的变量进行监视 或者说查看变量当前的数据

p 需要监视的变量     //查看变量当前的数值
p &需要查看的变量   //查看变量的地址

常显示: 

 display 需要显示的变量,常显示顾名思义,就算需要显示的变量会在运行的代码下方显示,当然想要去掉常显示则使用 undisplay 需要取消常显示的变量的编号

常显示后,变量发生了变化显示的内容也会发生变化!如下图所示! 

注意,编号: 是常显示的内容,行号 是代码运行的内容 

运行至下一个断点:

 使用 c 或者 contine 命令 从当前断点转跳到下一个断点!

转跳行数: 

使用 until 行号 命令 转跳到指定行号进行运行,之前几行代码会立马执行完毕到当前的指定行。

停止运行:

finish 命令 可以时运行停下。

相关推荐

  1. [ Linux ]调试工具gdb

    2024-02-17 08:40:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 08:40:02       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 08:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 08:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 08:40:02       18 阅读

热门阅读

  1. 【图论经典题目讲解】洛谷 P2371 墨墨的等式

    2024-02-17 08:40:02       31 阅读
  2. 紫微斗数全书卷一斗数太微赋

    2024-02-17 08:40:02       28 阅读
  3. 力扣热题100_双指针_15_三数之和

    2024-02-17 08:40:02       24 阅读
  4. Rust 初体验5

    2024-02-17 08:40:02       27 阅读
  5. truncate、delete、drop的区别?

    2024-02-17 08:40:02       32 阅读