自学内容网 自学内容网

Linux编程:用于调试 C、C++ 和其他编程语言编写的程序的调试工具GDB的使用

目录

一、概述

二、 安装GDB

三、准备程序

四、使用GDB

1、启动GDB

2、获取帮助

五、 常用GDB命令

六、示例调试会话

七、其他事项


一、概述

        GDB(GNU Debugger)是一个非常强大的调试工具,广泛用于调试 C、C++ 和其他编程语言编写的程序。其主要功能包括:

  1. 设置断点:在程序指定位置暂停执行,便于观察程序状态。
  2. 单步执行:逐行或逐指令执行程序,观察程序运行流程。
  3. 查看变量值:在调试过程中,实时查看变量的当前值。
  4. 跟踪函数调用:了解函数调用顺序和参数传递情况。
  5. 动态修改变量值:在调试过程中修改变量值,测试不同情况下的程序行为。
  6. 查看源代码:在调试过程中,随时查看当前执行到的源代码。
  7. 多线程调试:支持多线程程序的调试,可以查看和切换线程。
  8. 条件断点:设置断点在满足特定条件时触发,提高调试效率。
  9. 观察点:当变量值发生变化时,程序自动暂停。
  10. 调试核心转储文件:分析程序崩溃时的状态,找出崩溃原因。

    GDB为Linux环境下C/C++程序的开发和调试提供了强大的支持,帮助开发者快速定位和修复程序中的错误。使用GDB进行程序调试是Linux环境下开发人员常用的调试手段。 

二、 安装GDB

        确保系统中已经安装了GDB。在大多数Linux发行版中,可以使用包管理器来安装GDB。例如,在Ubuntu或Debian上,可以使用以下命令:

sudo apt-get install gdb

三、准备程序

        确保程序是可调试的,也就是说,它应该包含调试信息。在编译程序时,使用-g选项来包含调试信息:

gcc -g -o myApp myApp.c

四、使用GDB

1、启动GDB

启动GDB并指定想要调试的程序:

gdb ./myApp

2、获取帮助

可以使用如下命令获取帮助

gdb --h

实际操作如下:

获取帮助

五、 常用GDB命令

一旦GDB启动,可以使用以下命令进行调试:

- run(或简写r):开始执行程序。

- break(或简写b):设置一个断点。例如,break main会在main函数处设置一个断点。

- next(或简写n):执行下一行代码,但不进入函数内部。

- step(或简写s):执行下一行代码,如果是函数则进入函数内部。

- print(或简写p):打印变量的值。例如,print i会打印变量i的值。

- continue(或简写c):继续执行程序,直到下一个断点。

- quit(或简写q):退出GDB。

- list(或简写l):列出源代码。可以指定行号或函数名。

- info:查看信息,如info locals查看局部变量,info breakpoints查看断点信息。

- watch:设置观察点,当变量值变化时程序会停止。

六、示例调试会话

下面是一个简单的GDB调试会话示例:

$ gdb ./myApp
(gdb) break main
Breakpoint 1 at 0x400550: file myApp.c, line 5.
(gdb) run
Starting program: /path/to/myApp 

Breakpoint 1, main () at myApp.c:5
5           int i = 0;
(gdb) next
6           for(i = 0; i < 10; i++) {
(gdb) print i
$1 = 0
(gdb) continue
Continuing.

Breakpoint 1, main () at myApp.c:5
5           int i = 0;
(gdb) next
6           for(i = 0; i < 10; i++) {
(gdb) print i
$2 = 10
(gdb) quit

        在这个示例中,我们在main函数的开始处设置了一个断点,并启动了程序。程序在断点处停止,我们打印了变量i的值,然后继续执行。当循环结束时,我们再次打印i的值,并退出GDB。

七、其他事项

        1、在调试时,确保有程序的源代码,并且编译时加入了调试信息。

        2、GDB只能调试可执行文件,不能调试脚本语言(如Python或JavaScript)。

        3、如果程序是多线程的,GDB也提供了线程相关的命令,如thread(或简写t)。

        掌握GDB是Linux环境下C/C++程序调试的重要技能,它可以帮助快速定位和修复程序中的错误。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。



原文地址:https://blog.csdn.net/weixin_70208651/article/details/143667336

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!