当前位置: 首页 > news >正文

GDB调试入门笔记

文章目录

  • What?
  • Why
  • How
    • 安装GDB
      • 安装命令
      • 查看是否安装成功
      • 调试简单的程序
        • 预备一个程序
        • 调试
  • 使用
    • break
    • info
    • list
    • next
    • print
    • step
    • 一些小技巧
      • 在`gdb`前+`shell`
      • 日志功能
      • watch point| catch point
  • 调试core
  • 调试一个运行的程序

What?

GDB是什么?
全称GNU symbolic debugger
百度百科的解释:

程序调试工具
UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。

GDB支持的语言

  1. C/C++
  2. Assembly
  3. Go
  4. Pascal
  5. Rust

Why

The purpose of a debugger such as GDB is to allow you to see what is
going on “inside” another program while it executes – or what
another program was doing at the moment it crashed.

这个是gdb官方文档里面的内容给出了为什么需要gdb


How

安装GDB

安装命令

apt-get install gdb

查看是否安装成功

gdb --version

下面是安装成功的信息显示
image

调试简单的程序

预备一个程序

image
编译这个程序生成可执行文件
image
image

调试

如果我们想调试一个程序我们在用gcc编译的时候需要加上参数-g

gcc -g test.c

如何进入调试界面呢?
使用命令

gdb a.out

这里所有的a.out都是用gcc带参数生成的可执行文件

第一个命令
执行

r

image
退出gdb

quit

image

使用

break

break
简写b
可以在函数处打断点,也可以在某一行打断点

b main

在某一行打断点

b 7

info

info 是用来查看信息的
info b
查看自己的打的断点

image

list

查看源代码
list
查看我们写的代码

list

image

next

next;往下走一行
简写:n

print

我们打断点的目的是让程序在,某一步停止,便于我们查看信息。
如何查看信息呢?
使用print
简写p

p arr[0]

image

image

除了可以打印变量的值之外,我们还可以打印变量的地址

p &arr[0]

image
一个int占4个字节

step

进入某个函数
简写s
image

一些小技巧

gdb前+shell

image

日志功能

set logging on

watch point| catch point

调试core

等到用到时候再学吧

调试一个运行的程序

等到用到时候再学吧

http://www.lryc.cn/news/312353.html

相关文章:

  • JavaScript的`call`方法:实现函数间的调用!
  • qt5-入门-使用拖动方式创建Dialog
  • 【Redis】RedisTemplate和StringRedisTemplate的区别
  • 面试经典150题(101-104)
  • Java实现读取转码写入ES构建检索PDF等文档全栈流程
  • 主流开发环境和开发语言介绍
  • C++ 使用 nlohmann::json存储json文件
  • 何为OOM(Out of Memory)?
  • SpringBoot+Mybatis-plus+shardingsphere实现分库分表
  • FPGA DDR3简介及时序
  • java网络编程 02 socket
  • 【Web安全】SQL各类注入与绕过
  • C++ 设计模式
  • 安卓使用ExoPlayer出现膨胀类异常
  • C++之析构函数
  • 108. 将有序数组转换为二叉搜索树【简单】
  • vue3中watch和watchEffect的区别!!!
  • 【JavaEE初阶 -- 计算机核心工作机制】
  • springcloud:3.6测试信号量隔离
  • AI化未来:智能科技的新纪元
  • Unity 整体界面淡入淡出效果
  • 反序列化逃逸 [安洵杯 2019]easy_serialize_php1
  • JavaScript中的包装类型详解
  • 如何向各大媒体网站投稿 海外媒体发稿平台有哪些
  • 基于SpringBoot的论坛系统(附项目源码+论文)
  • 堆以及堆的实现
  • 使用RabbitMQ实现延时消息自动取消的简单案例
  • Docker部署(ruoyi案例接上篇Docker之部署前后端分离项目)实施必会!!!!
  • 电脑中已经有多个模组压缩文件,如何通过小火星露谷管理器批量安装
  • [Linux]如何理解kernel、shell、bash