博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux编程基础——GDB(入门)
阅读量:7120 次
发布时间:2019-06-28

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

调试是开发过程中一项不可或缺的工作,在Linux编程中,通常使用gdb来调试我们的c/c++程序,由于gdb可介绍的东西比较多,这里将分几篇文章介绍,网上有篇文章介绍的非常详细,值得收藏:用GDB调试程序、、、、、、。

前期准备

在程序编译的时候,函数名、变量名会被相应的内存地址所代替,但这些内存地址对于我们来说是不可读的。我们往往需要需要根据函数名、变量名来查找实际的地址,从而读取其值。

为了方便调试,gcc增加了一个-g参数,在编译的时候可以在程序集中添加相应的符号信息。

    gcc -g hello.c -o hello

启动GDB

启动GDB的方法有以下几种:

  1. gdb <program>    
    gdb关联程序,可以通过run命令启动关联上的程序进程。
  2. gdb <program> core    
    gdb调试core文件,core是程序非法执行后core dump后产生的文件。
  3. gdb <program> <PID>
    gdb调试当前正在运行的进程,类似VS中的"附加到进程"方式的调试。

这些方式实际上也可以自由组合使用。例如,我们也可以先通过gdb <program>关联程序,然后通过attach <pid>的方式调试当前正在运行的进程。

GDB环境简介

首先介绍下GDB环境,GDB也是一个Shell式的交互环境,在GDB中,可以进程看到其提示符:(gdb)

    (gdb) break

在gdb中,也想VS那样有一定的智能提示功能,具体如下:

  1. 输入命令时,可以不用打全命令,只用打命令的前几个字符就可以了。
  2. 当输入前几个字符后,可以通过Tab键自动补全
  3. 当前几个字符开头的命令较多时,Tab键无法补全,再次敲TAB键可以显示所有该字符开头的命令。
  4. 可以通过回车键重复执行命令(单步跟踪的时候常用)
  5. 可以通过上下键切换历史命令

例如,设置断点的命令是break,可以直接输入b;也可以输入b后敲两次Tab键以查询所有b开头的命令(只有一个的话可以直接补全):

    (gdb) b

    backtrace bookmark break break-range bt

这个智能提示也可以使用于在设置断点时候自动联想函数名称,例如,我们要对main函数设置断点,当输入b mai后敲Tab键,会自动补全为main

    (gdb) b main

另外,也可以通过help <command>命令查看不熟悉的命令的帮助信息,类似于shell下的man,非常方便。

退出GDB

退出gdb的方式比较简单,直接在Shell下输入q(quit)命令就可以了:

    (gdb) q

    tianfang >

由于篇幅所限,本文暂且介绍到这里,下篇文章主要介绍如何设置断点。

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

你可能感兴趣的文章
Nginx的启动、停止与重启
查看>>
Windows 64 位 mysql 5.7.20 安装教程
查看>>
css点滴3—5种方式实现圆环
查看>>
剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array
查看>>
screen 命令使用及示例
查看>>
IDEA 设置忽略那些文件不提交到SVN服务器
查看>>
PHP对象和接口抽象类注意事项
查看>>
触发器创建删除等操作
查看>>
Java版 数字金额大写转换
查看>>
Linux性能及调优指南(翻译)
查看>>
C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集...
查看>>
VS调试异常代码 HRESULT:0x80070057 (E_INVALIDARG)解决方法
查看>>
ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法
查看>>
PHP程序员学习路线
查看>>
伯乐在线-技术分享
查看>>
性能测 试理论篇
查看>>
IIS和tomcat共用80端口
查看>>
ES6的模块化
查看>>
Eclipse中.setting目录下文件介绍
查看>>
Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库
查看>>