博客
关于我
Linux终端调试大全(非常详细)零基础入门到精通,收藏这一篇就够了
阅读量:792 次
发布时间:2023-02-05

本文共 3230 字,大约阅读时间需要 10 分钟。

GDB 调试工具全解析:从裸奔到高效调试

在软件开发过程中,调试无疑是开发过程中最痛苦的环节之一。尤其是在面对复杂的程序崩溃时,如何快速定位问题至关重要。GDB(GNU Debugger)作为一款强大的调试工具,虽然功能强大,但默认的命令行界面对于新手来说可能过于复杂。因此,如何在终端下高效调试,或者选择更适合的调试工具,成为开发者们关注的重点。本文将为你介绍如何通过选择合适的工具和方法,使GDB调试效率得到显著提升。


##裸奔状态:原始的 GDB 命令行

在使用GDB之前,先熟悉其基本命令是必不可少的。命令行界面虽然功能全面,但对于新手来说可能显得生疏。

常用命令示例:

  • 查看调用栈bt
  • 查看本地变量info local
  • 上下移动栈帧up/down
  • 打印表达式print
  • 查看源代码list
  • 反汇编disassemble
  • 在生产环境中出现崩溃时,因线上服务器通常没有开发环境,因此可以通过简单的GDB命令快速定位问题。


    穿上内裤的 GDB:TUI 模式

    GDB 提供文本用户界面(TUI)模块,通过gdb -tui启动即可。TUI界面分为两个窗口:上方为源代码窗口,下方为GDB终端。

    窗口操作:

  • 切换窗口C-X O
  • 上下滚动C-N/C-P
  • 更新代码update
  • 全屏显示C-L
  • TUI模式下,程序单步执行时,源代码窗口会自动滚动,查看前后代码更加方便。


    穿上内衣:GDB 配置

    通过配置.gdbinit文件,可以为GDB添加更多功能。例如,配置PEDA插件后,命令提示符会变为gdb-peda,每次单步调试时会显示丰富的信息。

    示例配置:

    ~/.gdbinit
    set verboseset height 100define -t  def t    tstart    fast-backtrace  end  def t    tstop    fast-backtrace  end  def t    tcontinue    fast-backtrace  end  def t    tbreak    fast-backtrace  end  def t    tstep    fast-backtrace  end  def t    tnext    fast-backtrace  end  def t    tfinish    fast-backtrace  end  def t    tjump    fast-backtrace  end  def t    tprint    fast-backtrace  end  def t    tquit    fast-backtrace  end  def t    tkill    fast-backtrace  end  def t    twatch    fast-backtrace  end  def t    twatch    fast-backtrace  end  def t    tunwatch    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end  def t    tdisplay    fast-backtrace  end

    穿上外套的 GDB:CGDB

    CGDB是一个功能强大的GDB前端,结合终端窗口和代码窗口,操作更加方便。以下是其主要功能:

    主要功能:

  • 快捷键操作:方向键、翻页、切换窗口等操作与Vim类似。
  • 源代码高亮:支持代码窗口内的语法高亮。
  • 断点管理:在代码窗口直接设置断点,方便单步调试。
  • 多窗口支持:支持左右分屏布局,提升调试效率。
  • 快捷键示例:

    • F5:运行程序
    • F6:继续
    • F7:单步(代码级)
    • F8:步进(指令级)
    • F9:设置断点
    • F10:跳出循环

    穿戴整齐:Emacs GDB 模式

    Emacs提供了一个强大的GDB前端,支持多窗口布局和丰富的快捷键操作。以下是其主要功能:

    主要功能:

  • 多窗口布局:支持分屏、全屏等布局。
  • 快捷键操作:方向键、分屏、切换窗口等操作与Emacs类似。
  • 源代码窗口:支持代码高亮和断点设置。
  • 调试窗口:支持本地变量、寄存器、断点等信息查看。
  • 快捷键示例:

    • gud-run:运行程序
    • gud-cont:继续
    • gud-jump:跳转
    • gud-print:打印表达式
    • gud-break:设置断点

    调教 Emacs GDB 模式

    通过配置.emacs文件,可以为Emacs GDB模式添加更多功能。以下是常用配置示例:

    (global-set-key [M-left] 'windmove-left)(global-set-key [M-right] 'windmove-right)(global-set-key [M-up] 'windmove-up)(global-set-key [M-down] 'windmove-down)(global-set-key [f5] 'gud-run)(global-set-key [S-f5] 'gud-cont)(global-set-key [f6] 'gud-jump)(global-set-key [S-f6] 'gud-print)(global-set-key [f7] 'gud-step)(global-set-key [S-f7] 'gud-stepi)(global-set-key [S-f8] 'gud-nexti)(global-set-key [f9] 'gud-break)(global-set-key [S-f9] 'gud-remove)(global-set-key [f10] 'gud-until)(global-set-key [S-f10] 'gud-finish)(global-set-key [f4] 'gud-up)(global-set-key [S-f4] 'gud-down)(setq gdb-many-windows t)

    让 GDB 变得更性感一些

    除了上述工具,还可以尝试使用gdbgui,一个基于浏览器的GDB前端。它支持鼠标操作,界面更加友好。

    主要功能:

  • 可视化界面:支持代码窗口和调试终端并列显示。
  • 断点设置:通过鼠标点击设置断点。
  • 多种查看方式:支持调用栈、寄存器、内存等信息可视化。

  • 回顾与总结

    从裸奔的命令行到TUI、CGDB,再到Emacs和gdbgui,GDB 提供了多种调试工具和界面选择。选择合适的工具能够显著提升调试效率,减少无效操作。

    转载地址:http://dlkfk.baihongyu.com/

    你可能感兴趣的文章
    linux脚本执行报错:坏的解释器: 没有那个文件或目录
    查看>>
    Linux自主访问控制——有效ID与真实ID
    查看>>
    linux自动运行u盘上的脚本,脚本实现U盘自动挂载(linux)
    查看>>
    Linux自学笔记——openssh
    查看>>
    Linux自定义开机启动服务和chkconfig使用方法
    查看>>
    linux英英词典项目,五大主流英英词典(ESL)比较使用测评报告
    查看>>
    linux获取文件所在目录下,Linux_在Linux系统中获得文件所在目录名的方法,方式一:使用“ dirname“ - phpStudy...
    查看>>
    linux菜单无法编辑,gvim在linux下菜单无法显示问题
    查看>>
    Linux虚拟化网络之vlan配置实战
    查看>>
    Linux虚拟化网络之路由转发实战
    查看>>
    Linux虚拟化网络之链路聚合实战
    查看>>
    Linux虚拟机NAT模式设置静态IP并且能上网的设置方法
    查看>>
    Linux虚拟机上安装redis
    查看>>
    linux虚拟机配置静态网络,解决centos7网络异常,ping不通
    查看>>
    Linux虚拟网络设备—Veth Pair
    查看>>
    linux解压缩命令之unzip,tar(持续更新)
    查看>>
    linux解析core文件都是问号,gdb core文件函数出现问号
    查看>>
    linux设备共享,Linux中的存储设备共享之target
    查看>>
    Linux设备模型(5)_device和device driver
    查看>>
    Linux设备驱动开发学习(4):字符设备驱动(未完)
    查看>>