Linux 使用gdb调试C程序

这篇具有很好参考价值的文章主要介绍了Linux 使用gdb调试C程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、gdb的一些基础命令

l:显示代码
l n:跳转到当前代码页的第n行的代码
l filename.c :n:跳转到filename.c文件的第n行代码
b 行号:加断点
info break:查看断点信息
delete 断点编号:删除断点
r,运行程序
n,单步执行
c,继续执行,遇到断点停止执行
p,打印
s,进入函数
finish,退出函数
q,退出gdb

二、调试示例

先写一个main.c程序,该程序用来循环输出从键盘输入的字符串,直到遇到"end"结束循环:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器
Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

编译并运行main.c:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

发现和我们的预期并不一样,在输入"end"之后并没有结束循环,通过Ctrl+c结束这个进程。

  1. 进入gdb,gdb去调试Release版本:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

从上图可以看出目前并不可以进行调试,之所以能打出一些信息,是因为这些信息是gdb打印出来的,而main程序还没有执行,下面的这句话
Linux 使用gdb调试C程序,Linux,linux,c语言,服务器
告诉我们在main程序中没有找到合适的符号,也就是没有包含调试信息,所以这个时候是调试不了的。在输入l进行显示代码时,下面这句话
Linux 使用gdb调试C程序,Linux,linux,c语言,服务器
告诉我们没有调试的符号表示被导入。说明这时的main程序是有问题的,没有包含调试信息。输入q退出gdb。

  1. gdb去调试Debug版本:

(1)编译和跟踪

按照gcc -o main main.c -g去编译main.c生成可执行程序main,并用gdb去跟踪main程序:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器
这时我们可以通过Linux 使用gdb调试C程序,Linux,linux,c语言,服务器
这句话看出gdb从main中读到了符号表。

(2)显示所编写的代码

通过gdb指令l显示代码

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

一次只能显示10行代码。

(3)设置断点

语法形式:break 行号,break可以简写为b

将断点加到第13行:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

可以继续下断点:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

查看加了哪些断点info break

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

删除断点delete Num

删除第2个断点:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

(4)运行程序进行调试

输入run,可以简写为r,按回车:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

当前程序执行到了13行停止。

输入n,让程序单步执行:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

从上图可以看出输入了字符串"hello",然后程序运行到了17行的if语句。

这时,我们输入p buff来查看一些buff中的内容:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

可以看到,当前buff中存放的是字符串"hello\n"。

继续输入n单步执行:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

当前程序又执行到了13行。

我们继续单步执行,这次输入字符串"end",程序跳转到17行的if语句:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

此时,我们再输入p buff来查看一些buff中的内容:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

可以看到,当前buff中存放的是字符串"end\n",这和我们输入的字符串"end"并不相同。

因此,再继续执行时,程序依然会进入循环:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

此时,我们就通过调试发现了代码中存在的问题。

  1. 退出gdb

输入q退出gdb,此时会提示如果要退出会杀死刚刚的main程序,是否要退出,输入y表示退出,按回车就退出gdb。
Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

退出gdb之后,刚刚的main程序也就结束了:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

  1. 通过调试结果修正代码

将strcmp()改为strncmp():

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器

此时,我们再去编译main.c,执行main程序,结果如下:

Linux 使用gdb调试C程序,Linux,linux,c语言,服务器文章来源地址https://www.toymoban.com/news/detail-647424.html

到了这里,关于Linux 使用gdb调试C程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】——调试器-gdb的使用

    序言: 本期,我将带领大家学习的关于linux下的 调试器gdb 的使用,废话不多说跟着我一起去看看吧!! 目录 前言 (一)背景介绍 1、debug模式和release模式 2、为什么Release不能调试但DeBug可以调试 3、初步见识 1️⃣readelf (二)调试代码 1、命名大全 2、具体演示 0️⃣行号显

    2024年02月07日
    浏览(40)
  • 【Linux】gdb调试器的使用

    文章目录 一、gdb简介 二、调试前的准备 1、生成调试文件 2、启动 gdb  三、gdb 使用方法  1、查看源代码 2、设置 / 查看断点(多种方式设置断点) 方法一 方法二 方法三 3、run  4、删除断点、断点无效 5、逐过程调试(以函数为单位) 6、逐语句调试 7、查看调用链 8、查看变

    2024年02月02日
    浏览(50)
  • [linux开发工具]小程序--进度条、调试器 - gdb

    📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 第一种情况 执行结果如下: 可以看到程序先执行printf再执行sleep 第二种情况 执行结果如下: 在这里

    2024年02月22日
    浏览(43)
  • Linux系统下的程序调试工具——GDB(GNU Debugger)

    GCC(GNU Compiler Collection)是GNU开发的编程语言编译器,它支持多种编程语言,如C、C++、Objective-C、Fortran、Ada和Go等。 以下是一些常用的操作: 启动GDB并加载程序 设置断点 在代码中的某一行设置断点,当程序运行到这一行时,GDB会暂停执行。 例如,如果你在 main.c 文件的第

    2024年04月13日
    浏览(48)
  • 【Linux】调试器:gdb 的基本使用

    gdb 全称 GNU symbolic debugger,是 Linux 下常用的程序调试器。 调试器的核心工作,主要是为了定位问题。废话不多说。 gdb 的安装 另外: gcc、g++ 默认形成的版本是 release,不是 debug 版本!所以想要在 Linux 下调试程序,需要在 Makefile 文件 中,添加 -g 选项 指定以 dubug 方式编译程

    2024年02月16日
    浏览(42)
  • Linux:gdb调试器的解析+使用(超详细版)

    程序的发布方式有两种,debug模式和release模式 debug模式:可以被调试; release模式:不可以被调试。 为什么需要debuy和release这两个模式呢? 答:程序员在开发的时候需要去调试代码,所以需要debuy模式,而用户一般不懂这些代码的调试不需要debuy模式,只需要快速的下载和安

    2024年02月05日
    浏览(47)
  • 《Linux从练气到飞升》No.09 Linux调试器-gdb使用

    🕺作者: 主页 我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇 码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!! 当我们在 vscode 等 IDE 上编写代码出错时,通常会

    2024年02月13日
    浏览(38)
  • 『Linux从入门到精通』第 ⑪ 期 - Linux调试器——gdb使用详解

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 C语言初阶专栏 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 C++系列 、 数据结构

    2024年02月02日
    浏览(39)
  • Linux之基础开发工具gdb调试器的使用(三)

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 yum install -y gdb 程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试 要使用gd

    2024年02月05日
    浏览(47)
  • 【Linux】编译器-gcc/g++与调试器-gdb的使用

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.gcc/g++语法 2.gcc的使用及编译器是如何\\\"翻译\\\"代码的? (1)预处理 (2)编译 (3)汇编

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包