`
unsoundboy
  • 浏览: 63404 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

GDB调试

阅读更多
1 GDB 命令行参数

启动 GDB:

    * gdb executable
    * gdb -e executable -c core-file
    * gdb executable -pid process-id
      (使用命令 'ps -auxw' 可以查看进程的 pid)

    选项 含义
    --help
    -h 列出命令行参数。
    --exec=file
    -e file 指定可执行文件。
    --core=core-file
    -c core-file 指明 core 文件。
    --command=file
    -x file 从指定文件中读取 gdb 命令。
    --directory=directory
    -d directory 把指定目录加入到源文件搜索路径中。
    --cd=directory 以指定目录作为当前路径来运行 gdb 。
    --nx
    -n 不要执行 .gdbinit 文件中的命令。默认情况下,这个文件中的命令会在所有命令行参数处理完后被执行。
    --batch 在非交互模式下运行 gdb 。从文件中读取命令,所以需要 -x 选项。
    --symbols=file
    -s file 从指定文件中读取符号表。
    -write 允许对可执行文件和 core 文件进行写操作。
    --quiet
    -q 不要打印介绍和版权信息。
    --tty=device 指定 device 为运行程序的标准输入输出。
    --pid=process-id
    -p process-id
    指定要附属的进程 ID 。

2 GDB 命令

GDB 中使用的命令:

    命令 描述
    help 列出 gdb 帮助信息。
    help topic 列出相关话题中的 gdb 命令。
    help command 列出命令描述信息。
    apropos search-word 搜索相关的话题。
    info args
    i args 列出运行程序的命令行参数。
    info breakpoints 列出断点。
    info break 列出断点号。
    info break breakpoint-number 列出指定断点的信息。
    info watchpoints 列出观察点。
    info registers 列出使用的寄存器。
    info threads 列出当前的线程。
    info set 列出可以设置的选项。
    Break and Watch
    break funtion
    break line-number 在指定的函数,或者行号处设置断点。
    break +offset
    break -offset 在当前停留的地方前面或后面的几行处设置断点。
    break file:func 在指定的file文件中的func处设置断点。
    break file:nth 在指定的file文件中的第nth行设置断点。
    break *address 在指定的地址处设置断点。一般在没有源代码时使用。
    break line-number if condition 如果条件满足,在指定位置设置断点。
    break line thread thread-number 在指定的线程中中断。使用info threads可以显示线程号。
    tbreak 设置临时的断点。中断一次后断点会被删除。
    watch condition 当条件满足时设置观察点。
    clear
    clear func
    clear nth 清除函数func处的断点。
    清除第nth行处的断点。
    delete
    d 删除所有的断点或观察点。
    delete breakpoint-number
    delete range 删除指定的断点,观察点。
    disable breakpoint-number-or-range
    enable breakpoint-number-or-range 不删除断点,仅仅把它设置为无效,或有效。
    例子:
    显示断点: info break
    设置无效: disable 2-9
    enable once breakpoint-number 设置指定断点有效,当到达断点时置为无效。
    enable del breakpoint-number 设置指定断点有效,当到达断点时删除它。
    finish 继续执行到函数结束。
    Line Execution
    step
    s
    step number-of-steps-to-perform 进入下一行代码的执行,会进入函数内部。
    next
    n
    next number 执行下一行代码。但不会进入函数内部。
    until
    until line-number 继续运行直到到达指定行号,或者函数,地址等。
    return
    return expression 弹出选中的栈帧(stack frame)。如果后面指定参数,则返回表达式的值。
    stepi
    si
    nexti
    ni 执行下一条汇编/CPU指令。
    info signals
    info handle
    handle SIGNAL-NAME option 当收到信号时执行下列动作:nostop(不要停止程序),stop(停止程序执行),print(显示信号),noprint(不显示),pass/noignore(允许程序处理信号),nopass/ignore(不让程序接受信号)
    where 显示当前的行号和所处的函数。
    Program Stack
    backtrace
    bt
    bt inner-function-nesting-depth
    bt -outer-function-nesting-depth 显示当前堆栈的追踪,当前所在的函数。
    backtrace full 打印所有局部变量的值。
    frame number
    f number 选择指定的栈帧。
    up number
    down number 向上或向下移动指定个数的栈帧。
    info frame addr 描述选中的栈帧。
    info args
    info all-reg
    info locals
    info catch 显示选中栈帧的参数,局部变量,异常处理函数。all-reg也会列出浮点寄存器。
    Source Code
    list
    l
    list line-number
    list function
    list -
    list start#,end#
    list filename:function 列出相应的源代码。
    set listsize count
    show listsize 设置list命令打印源代码时的行数。
    directory directory-name
    dir directory-name
    show directories 在源代码路径前添加指定的目录。
    directory 当后面没有参数时,清除源代码目录。
    Examine Variables
    print variable
    p variable
    p file::variable
    p 'file'::variable 打印指定变量的值。
    p *array-var@length 打印arrary-var中的前length项。
    p/x var 以十六进制打印整数变量var。
    p/d var 把变量var当作有符号整数打印。
    p/u var 把变量var作为无符号整数打印。
    p/o var 把变量var作为八进制数打印。
    p/t var
    x/b address
    x/b &variable 以整数二进制的形式打印var变量的值。
    p/c variable 当字符打印。
    p/f variable 以浮点数格式打印变量var。
    p/a variable 打印十六进制形式的地址。
    x/w address
    x/4b &variable 打印指定的地址,以四字节一组的方式。
    call expression 类似于print,但不打印 void 。
    disassem addr 对指定地址中的指令进行反汇编。
    Controlling GDB
    set gdb-option value 设置 GDB 的选项。
    set print array on
    set print array off
    show print array 以可读形式打印数组。默认是 off 。
    set print array-indexes on
    set print array-indexes off
    show print array-indexes 打印数组元素的下标。默认是 off 。
    set print pretty on
    set print pretty off
    show print pretty 格式化打印 C 结构体的输出。
    set print union on
    set print union off
    show print union 打印 C 中的联合体。默认是 on 。
    set print demangle on
    set print demangle off
    show print demangle 控制 C++ 中名字的打印。默认是 on 。
    Working Files
    info files
    info share 列出当前的文件,共享库。
    file file 把file当作调试的程序。如果没指定参数,丢弃。
    core file 把file当作 core 文件。如果没指定参数,则丢弃。
    exec file 把file当作执行程序。如果没指定参数,则丢弃。
    symbol file 从file中读取符号表。如果没指定参数,则丢弃。
    load file 动态链入file文件,并读取它的符号表。
    path directory 把目录directory加入到搜索可执行文件和符号文件的路径中。
    Start and Stop
    run
    r
    run command-line-arguments
    run < infile > outfile 从头开始执行程序,也允许进行重定向。
    continue
    c 继续执行直到下一个断点或观察点。
    continue number 继续执行,但会忽略当前的断点number次。当断点在循环中时非常有用。
    kill 停止程序执行。
    quit
    q 退出 GDB 调试器。

3 GDB 操作提示

    * 在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。
    * 不要使用编译器的优化选项,比如: "-O","-O2"。因为编译器会为了优化而改变程序流程,那样不利于调试。
    * 在 GDB 中执行 shell 命令可以使用:shell command
    * GDB 命令可以使用 TAB 键来补全。按两次 TAB 键可以看到所有可能的匹配。
    * GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints。
    * GDB 在 Emacs 中的操作:

emacs 按键 动作
M-x gdb 切换到 gdb 模式。
C-h m 显示 gdb 模式介绍信息。
M-s 等同于gdb 中的 step 命令。
M-n 等同于gdb 中的 next 命令。
M-i 等同于gdb 中的 stepi 命令。
C-c C-f 等同于gdb 中的 finish 命令。
M-c 等同于gdb 中的 continue 命令。
M-u 等同于gdb 中的 up 命令。
M-d 等同于gdb 中的 down 命令。
分享到:
评论

相关推荐

    基于springboot教育资源共享平台源码数据库文档.zip

    基于springboot教育资源共享平台源码数据库文档.zip

    视频笔记linux开发篇

    linux开发篇,配套视频:https://www.bilibili.com/list/474327672?sid=4493702&spm_id_from=333.999.0.0&desc=1

    readera-24-09-08plus2020.apk

    ReadEra 这个阅读应用能够打开下列任何格式的文档: EPUB, PDF, DOC, RTF, TXT, DJVU, FB2, MOBI, 和 CHM. 基本上来说,你可以用它阅读你的设备内存中的任何书籍或者文本文档。 这个应用与划分成章节的文档兼。,有一个书签功能,可以在你阅读的时候,自动保存你的进度。另外,它让你更改页面模式,从几种不同的主题中进行挑选(夜间,白天,棕黑色调,还有控制台)。

    STM32单片机控制舵机旋转

    软件环境:KEIL4 硬件环境:STM32单片机+舵机 控制原理:通过控制输出信号的占空比调节舵机旋转的角度

    基于springboot仓库管理系统源码数据库文档.zip

    基于springboot仓库管理系统源码数据库文档.zip

    酒店管理系统源码C++实现的毕业设计项目源码.zip

    酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 酒店管理系统源码C++实现的毕业设计项目源码.zip,酒店管理系统源码C++实现的毕业设计项目源码.zip个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕

    58商铺全新UI试客试用平台网站源码

    58商铺全新UI试客试用平台网站源码

    基于SpringBoot+Vue的轻量级定时任务管理系统.zip

    springboot vue3前后端分离 基于SpringBoot+Vue的轻量级定时任务管理系统.zip

    毕业设计&课设_微博情感分析,用 flask 构建 restful api,含相关算法及数据文件.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    4D毫米波雷达点云数据处理方法研究.caj

    4D毫米波雷达点云数据处理方法研究.caj

    S M 2 2 5 8 X T量产工具

    S M 2 2 5 8 X T 量产工具供大家下载使用

    基于springboot的文物管理系统源码数据库文档.zip

    基于springboot的文物管理系统源码数据库文档.zip

    基于springboot的电影院售票管理系统源码数据库文档.zip

    基于springboot的电影院售票管理系统源码数据库文档.zip

    Javaweb仓库管理系统项目源码.zip

    基于Java web 实现的仓库管理系统源码,适用于初学者了解Java web的开发过程以及仓库管理系统的实现。

    美容美发项目,使用django框架,前后端一体化项目

    美容美发项目,使用django框架,前后端一体化项目

    2023年中国在线票务行业市场规模约为24.99亿元,挖掘市场新机遇

    在线票务:2023年中国在线票务行业市场规模约为24.99亿元,挖掘市场蓝海新机遇 在数字浪潮的席卷下,传统的票务销售模式正经历着前所未有的变革。纸质门票逐渐淡出人们的视野,取而代之的是便捷、高效的数字和移动票务。这一转变不仅为消费者带来了前所未有的购票体验,更为在线票务平台开辟了广阔的发展空间和市场机遇。随着国民经济的持续增长和文体娱乐行业的蓬勃发展,中国在线票务行业正站在时代的风口浪尖,等待着每一位有志之士的加入。那么,这片蓝海市场究竟蕴藏着怎样的潜力?又该如何把握机遇,实现突破?让我们一同探索。 市场概况: 近年来,中国在线票务行业市场规模持续扩大,展现出强劲的增长势头。据QYResearch数据显示,2023年中国在线票务行业市场规模约为24.99亿元,尽管受到宏观经济的影响,市场规模增速放缓,但整体趋势依然向好。这一增长主要得益于国民人均收入的不断提高、电影及演出行业的快速发展以及政府政策的支持。例如,2023年财政部、国家电影局发布的《关于阶段性免征国家电影事业发展专项资金政策的公告》,为电影行业注入了强劲动力,进而推动了在线票务市场规模的扩大。 技术创新与趋势: 技术进步

    基于SpringBoot的养老院管理系统源码数据库文档.zip

    基于SpringBoot的养老院管理系统源码数据库文档.zip

    毕业设计&课设_含构建设置及相关操作,基于特定技术,具体功能未详细说明.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    Go语言入门指南:基础语法、并发编程详解

    内容概要:本文档是一份详细的Go语言教程,从基础概念介绍到高级主题均有覆盖。主要内容包括Go语言的基础语法、数据类型、控制结构、函数、结构体、接口和并发编程等方面。通过具体示例介绍了如何使用Go语言进行开发。 适合人群:初学者和有一定经验的程序员都可以从这篇教程中受益,特别是那些想要快速掌握Go语言并应用于实际项目的开发者。 使用场景及目标:适用于初学者系统学习Go语言的基础知识和常用功能;也可以作为已有开发经验者的参考资料,帮助他们解决具体的编程问题,提高开发效率。 其他说明:本教程不仅包含了Go语言的基本知识点,还重点讲解了其独特的并发编程模型。读者在学习过程中应该注重理论与实践相结合,通过实际编写代码来加深理解和记忆。

    基于springboot计算机基础网上考试系统源码数据库文档.zip

    基于springboot计算机基础网上考试系统源码数据库文档.zip

Global site tag (gtag.js) - Google Analytics