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

GDB调试命令学习

GDB是什么
调试程序
程序中出现语法错误可以借助编译器解决,但逻辑错误则只能靠自己解决,
所谓调试(Debug)就是让代码一步步慢慢执行,跟踪程序的运行过程。比如,可以让程序stop在某行,查看下当前所有变量的值,或者内存中的数据,也可以让程序一次执行单步,或者多步语句,看看程序到底执行了哪些代码。
GDB支持多种编程语言编写的程序,包括C,C++,Object-C等,实现功能:
a)程序启动时,可以按照我们自定义的要求运行程序,例如设置参数和环境变量;
b)可使被调程序在指定代码处暂停运行,并查看当前程序的运行状态(例如当前变量的值,函数的执行结果等),即支持断点调试
c)程序执行过程中,可以改变某个变量的值,还可以改变代码执行顺序,从而尝试修改程序中出现的逻辑错误

一,安装

终端里输入以下指令:
apt-get update
apt-get install gdb

查看GDB版本
输入gdb -v 如果显示处gdb版本,表明安装成功

二,GDB的用法

常用调试命令

GDB的主要功能就是监控程序的执行流程。这也就意味着,只有当源程序文件编译为可执行文件并执行时,并且该文件中必须包含必要的调试信息(比如各行代码所在的行号、包含程序中所有变量名称的列表(又称为符号表)等),GDB才会派上用场。

所以在编译时需要使用 gcc/g++ -g 选项编译源文件,才可生成满足 GDB 要求的可执行文件

三,举例说明

$ ls  
main.cpp//Step1,编译时需要使用 gcc/g++ -g 选项编译源文件main.cpp 成 test
$ g++ -g -o test main.cpp
$ ls
main.cpp  test//Step2,启动gdb进行调试
$ gdb test         <-- 启动gdb进行调试
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-94.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/zhuyong/project/linux/blog/gdb/test...done.
(gdb)//gdb启动时会默认打印一堆免责条款,通过添加 --silent(或者 -q、--quiet)选项,可将这部分信息屏蔽掉。
//Step2,启动gdb进行调试
$ gdb test -q      <-- 启动gdb进行调试
Reading symbols from /home/zhudi/project/linux/blog/gdb/test...done.//Step3, (gdb) list (l) 即显示带行号的源代码
(gdb) l            <-- 显示带行号的源代码
1	#include <iostream>
2	using namespace std;
3
4	int main() {
5	    int sum = 0;
6	    int n = 1;
7	    while (n <= 100) {
8	        sum += n;
9	        n++;
10	    }
(gdb)              <-- 默认情况下,l 选项只显示 10 行源代码,如果查看后续代码,按 Enter 回车键即可
11	    cout << "sum = " << sum << endl;
12
13	    return 0;
14	}
15//Step4,(gdb) break (b) 在第7行打断点
(gdb) b 7          <-- 在第7行源代码处打断点
Breakpoint 1 at 0x4008d3: file main.cpp, line 7.//Step5,(gdb) run (r)执行被调试的程序,其会自动在第一个断点处暂停执行。
(gdb) r            <-- 运行程序,遇到断点停止
Starting program: /home/zhudi/project/linux/blog/gdb/testBreakpoint 1, main () at main.cpp:7
7	    while (n <= 100) {
Missing separate debuginfos, use: debuginfo-install glibc-2.17-307.el7.1.x86_64 libgcc-4.8.5-39.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64//Step6 (gdb) print (p) 打印查看指定变量的值
(gdb) print n      <-- 查看代码中变量 n 的值
$1 = 1             <-- 当前 n 的值为 1,$1 表示该变量 表示该变量所在存储区的名称//Step7,重复第4步骤
(gdb) b 13
Breakpoint 2 at 0x40090e: file main.cpp, line 13.//Step8,(gdb) next (n)
(gdb) n            <-- 单步执行程序
8	        sum += n;//Step9,(gdb) next (n)
(gdb) n            <-- 单步执行程序
9	        n++;//Step10,(gdb) continue (c)
(gdb) c            <-- 继续执行程序
Continuing.
sum = 5050Breakpoint 2, main () at main.cpp:13
13	    return 0;//Step11,(gdb) print (p) 打印查看指定变量的值
(gdb) print sum     <-- 查看 sum 的值    
$2 = 5050           <-- 当前 sum 的值为 5050//Step12,(gdb) quit (q)
(gdb) q             <-- 退出调试
A debugging session is active.Inferior 1 [process 8449] will be killed.Quit anyway? (y or n) y     <-- 确认是否退出调试,y 为退出,n 为不退出


http://www.dtcms.com/a/297918.html

相关文章:

  • spring boot项目使用Spring Security加密
  • k8s开启审计日志
  • 【SSL证书校验问题】通过 monkey-patch 关掉 SSL 证书校验
  • Fluent遇上AI:深度学习重塑计算流体动力学的未来
  • 【记录】C++生产者 / 消费者 案例
  • 刷题日记0725
  • 篇五 网络通信硬件之PHY,MAC, RJ45
  • PytorchLightning最佳实践基础篇
  • 谷歌母公司Alphabet发布超预期业绩,提高全年资本支出至850亿美元
  • 从 Elastic 到 ClickHouse:日志系统性能与成本优化之路
  • 【大模型实战】提示工程(Prompt Engineering)
  • 优秀案例:基于python django的智能家居销售数据采集和分析系统设计与实现,使用混合推荐算法和LSTM算法情感分析
  • 九联UNT413AS_晶晨S905L3S芯片_2+8G_安卓9.0_线刷固件包
  • 短剧小程序系统开发:构建影视娱乐生态新格局
  • Spring Boot License 认证系统
  • C#(数据类型)
  • k8s的存储之secerts
  • Python数据可视化利器:Matplotlib全解析
  • 智能制造——解读39页MOM数字化工厂平台解决方案【附全文阅读】
  • Linux网络配置全攻略:IP、路由与双机通信
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十天-准备项目中
  • 图的遍历:深度优先与广度优先
  • SpringBoot学习路径二--Spring Boot自动配置原理深度解析
  • Qt 状态机框架:复杂交互逻辑的处理
  • R 语言绘制六种精美热图:转录组数据可视化实践(基于 pheatmap 包)
  • 从零开始学习Dify-数据库数据可视化(五)
  • java的设计模式及代理模式
  • 负载均衡:提升业务性能的关键技术
  • Zabbix告警系统集成指南:从钉钉机器人到网易邮件的全流程配置
  • pytest-html 优势及与其他插件对比