Linux下:gcc/g++调试工具gdb

ops/2024/12/22 16:25:18/

gdb

  • 程序的发布方式有两种,debug模式和release模式

  • Linux gcc/g++出来的二进制程序,默认是release模式

  • gdb mybin

debug和release

debug
debug模式下生成的可执行程序会添加调试信息,所以生成的可执行程序会较大

  • 在使用gcc/g++进行编译的时候添加-g选项,会选择使用debug模式编译

release
release模式下生成的可执行程序会去除调试信息,可执行程序会较小

  • gcc/g++编译时默认使用的releas模式

可执行程序的格式

可执行程序的格式为 ELF
  • readelf
    直接读取可执行程序的格式

gdb调试

开始调试
gdb mybin,对可执行程序mybin使用gdb开始调试

退出调试
quit

调试指令

  • list / l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
  • list / l 函数名:列出某个函数的源代码
  • r或run:运行程序
  • n或nuxt:单条执行
  • s或step:进入函数调用
  • break(b)行号:在某一行设置断电
  • break 函数名:在某个函数开头设置断点
  • info break:查看断点信息
  • finish:执行完当前函数返回,然后停下来等待命令
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值
  • set var:修改变量的值
  • countinue(或c):从当前位置开始连续而非单步执行程序,从一个断点执行到下一个断点
  • run(r):从开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakponts n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • info(i)breakpoints:查看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until:在一个范围内,直接运行到指定行
  • until x行号:跳至x行
  • breaktrace(bt):查看各级函数调用及参数
  • info(i)locals:查看当前栈帧局部变量的值


http://www.ppmy.cn/ops/7951.html

相关文章

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order,本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

微服务架构中的业务完整性验证设计

目录 1.概要设计 1.1 功能完整性与正确性验证 1.2 性能与响应速度验证 1.3 安全性验证 1.4 容错性与恢复能力验证 1.5 监控与日志记录验证 2.技术实现 2.1 测试策略与工具选择 2.2 身份验证与授权 2.3 数据一致性与事务管理 2.4 监控与日志 2.5 容错与恢复 2.6 数…

C 练习实例25

C 练习实例25 题目&#xff1a; 求12!3!...20!的和。 程序分析&#xff1a; 此程序只是把累加变成了累乘。 实例 #include <stdio.h>int main() {int i;long double sum,mix;sum0,mix1;for(i1;i<20;i){mixmix*i;sumsummix;} printf("%Lf\n",sum); }以…

LinkedList和链表

1.ArrayList的缺陷 ArraryList由于底层是一段连续的空间&#xff0c;所以在ArrayList任意位置插入或者删除元素时&#xff0c;就 需要将后续元素往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除比较…

CodeForce[1500-2000]——1950F - 0, 1, 2, Tree!

codeforces刷题日记 题目大意&#xff1a;要求你构造一棵树&#xff0c;树有三种节点&#xff0c;a个节点有两颗子树&#xff0c;b个节点有一颗子树&#xff0c;c给节点是叶子节点&#xff0c;求这样一颗树的最小深度。 思路&#xff1a;首先可以确定这是一颗二叉树&#xff0…

2024年4月22日加密解密验签业务总结

第一版&#xff1a;企业收入区间查询业务接口 {"info": {"_postman_id": "4d25be8f-30a6-4ac2-b920-1130fbd5555b","name": "企业区间数据查询业务接口","schema": "https://schema.getpostman.com/json/c…

RattbitMQ安装

1.RabbitMQ是什么? RabbitMQ是消息队列的一种&#xff0c;生态好&#xff0c;好学习&#xff0c;易于理解&#xff0c;时效性强,支持很多不同语言的客户端,扩展性、可用性都很不错。学习性价比非常高的消息队列&#xff0c;适用于绝大多数中小规模分布式系统。 今天先来简单讲…

SQLite R*Tree 模块(三十三)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite FTS3 和 FTS4 扩展(三十二) 下一篇:SQLite轻量级会话扩展&#xff08;三十四&#xff09; 1. 概述 R-Tree 是一个特殊的 专为执行范围查询而设计的索引。R-树最常见的是 用于地理空间系统&#xff0c;其中…