GDB调试

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

GDB调试

一、基本常用指令

1.1 调试前的准备

用gcc/g++编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加 -g 的参数。

gcc -g -o book book.c

gdb book

gdb调试,linux,c++

1.2 基本调试命令

命令                   命令缩写             命令说明 
set args                                设置主程序的参数。
break                   b               设置断点。
run                     r               开始运行程序。运行到第一个断点位置,如果没有断点就直接运行结束。
next                    n               执行当前行。如果当前行包含函数调用,不会进入函数。
step                    s               执行当前行。如果当前行包含函数调用,则进入函数,执行函数体第一条语句。注意,如果函数是库函数或者第三方提供的函数,由于没有源代码,也无法进入函数体。
print                   p               显示变量或表达式的值。
continue                c               继续运行程序,直到下一个断点或者程序结束。
set var name = value                    设置变量的值。
quit                    q               退出gdb环境。

二、调试core文件

2.1 什么是core文件?

core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump文件,默认生成位置与可执行程序位于同一目录下,文件名为core。

2.2 如何调试?

程序挂掉时,系统默认不会生成core文件。

ulimit -a:  查看系统参数,若后面的数字为0,则代表不生成core文件
ulimit -c unlimited:    将core文件大小设置为无限制,即生成core文件
gdb 程序名 core文件名:  查看core文件

gdb调试,linux,c++
gdb调试,linux,c++

三、调试正在运行的程序

获取程序运行的进程id:   ps -ef | grep book(程序名)
调试指定进程:  gdb -p 进程id
    note:   此时,程序在输入调试命令之后会暂停。
            输入命令q退出后,程序继续运行。
            如果运行程序没有暂停,有可能是权限的问题,命令前加上sudo。
查看程序的函数调用栈:  bt

gdb调试,linux,c++

四、调试多进程程序

调试父进程:    set follow-fork-mode parent(缺省)
调试子进程:    set follow-fork-mode child

gdb调试,linux,c++
gdb调试,linux,c++

设置调试模式:  set detach-on-fork [on | off]
    表示调试当前进程时,其他进程是否继续运行。
    	on,其他进程继续运行,默认情况;
    	off,其他进程被挂起。

gdb调试,linux,c++

查看调试的进程信息:    info inferiors
切换当前调试的进程:    inferior 进程编号(非进程id)

gdb调试,linux,c++

五、调试多线程程序

查看当前运行的进程:    ps aux | grep 程序运行名
查看当前运行的轻量级进程即线程:    ps -aL | grep 程序运行名
查看主线程和子线程的关系:  pstree -p 主线程id

gdb调试,linux,c++

查看断点信息:  info b
查看线程信息:  info threads
    note:线程编号前的*代表当前线程
切换线程:  thread 线程编号

gdb调试,linux,c++
gdb调试,linux,c++

只运行当前线程:    set scheduler-locking on
运行全部线程:  set scheduler-locking off(默认)
指定某线程执行某gdb命令:   thread apply 线程id cmd
全部线程执行某gdb命令: thread apply all cmd

gdb调试,linux,c++
gdb调试,linux,c++
gdb调试,linux,c++

六、调试服务程序运行日志

问题:单纯的设置断点或者单步追踪可能会干扰多进程或多线程之间的竞争状态,从而看到的是一个假象。在多进程或多线程开发环境中,一旦某个进程或线程被设置断点,则另外的进程可以继续执行,就会破坏并发的场景。

解决办法:输出log日志。文章来源地址https://www.toymoban.com/news/detail-644758.html

相关日志框架:http://www.freecplus.net/9ebb8276265b404488a3415be224ed85.html

Note: 学习视频

https://www.bilibili.com/video/BV1ei4y1V758?share_source=copy_webvd_source=c471ece78e14625ba66c40c2896b30a9![请添加图片描述](https://img-blog.csdnimg.cn/2bb667d69a484df09683a0c1fb6855a6.jpeg)

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

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

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

相关文章

  • 【linux】“gdb“调试方法与技巧

    【linux】“gdb“调试方法与技巧

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 gdb是一款开源的、功能强大的调试器,它可以用于调试多种编程语言,如C、C++、汇编语言等。gdb可以帮助开发者在程序运行时进行调试,并找到程序

    2024年02月16日
    浏览(20)
  • Linux调试器之gdb

    Linux调试器之gdb

    我们前面介绍了几个基本的环境开发工具。例如通过yum我们可以安装和卸载软件、通过vim我们可以写代码、通过gcc和g++我们可以编译代码成可执行程序。但是如何在Linux下调试代码呢?我们并未介绍,本期我们将来介绍最后一个工具 --- 调试器gdb。 程序的发布方式 gdb基本的调

    2024年04月16日
    浏览(12)
  • Linux - 还不懂 gdb 调试器?(调试软件)

    Linux - 还不懂 gdb 调试器?(调试软件)

    当前,我们可以使用 make/makefile 来程序化执行代码文件;可以使用 gcc/g++ 等编译器来编译代码;可以使用 vim 编辑器来编写代码;其实在 Linux 当中还有一个工具,可以实现调试工作,这个工具就是 -- gdb。 在了解调试器之前,你应该对代码的发布版本做一些了解: 我们在 VS

    2024年02月07日
    浏览(8)
  • [Linux] Linux代码调试器 -- gdb

    [Linux] Linux代码调试器 -- gdb

    1、程序的发布方式有两种,debug模式和release模式 2、Linux gcc/g++出来的二进制程序,默认是release模式 3、要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 我们先来写一段C语言代码: 这里我们正常再编写一个Makefile文件,用于自动化构建,我们要还是正常的编

    2024年02月05日
    浏览(15)
  • 【Linux】Linux调试器-gdb使用

    【Linux】Linux调试器-gdb使用

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 退出:  调试命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某

    2024年02月21日
    浏览(12)
  • 在linux中的GDB调试一些用法

    -g: 选项的作用是在可执行文件中加入源代码的信息 -Wall:尽量不影响程序行为的情况下选项打开所有warning program:为程序名 help:使用帮助 gdb:启动程序 quit:退出调试 set args num1 num2 …:设置程序中需要的参数(就是cin需要接收的值) show args:展示参数 list或者l :从默认位

    2024年02月05日
    浏览(16)
  • 【Linux】——调试器-gdb的使用

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

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

    2024年02月07日
    浏览(14)
  • Linux的调试工具 - gdb(超详细)

    Linux的调试工具 - gdb(超详细)

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,发布成debug模式 注: 如果没有断点,程序将运行到底 注: 单条执行需要在调试启动的情况下进行,需要先打断点

    2024年02月07日
    浏览(10)
  • 【linux】git和gdb调试工具

    【linux】git和gdb调试工具

    这两个步骤用于识别提交代码的身份,一个你的名字,一个你的邮箱 开启本地仓库 克隆本地仓库成功 我们将这个仓库拷到了111目录底下. 我们发现少了一个.gitignore,因为.gitignore是隐藏文件,所以使用ls -la查看 用于查看提交状态 上面可以看到提交人的信息,以及时间,以及提

    2024年02月22日
    浏览(6)
  • 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 ,进入函数

    2024年02月13日
    浏览(13)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包