GDB调试方法汇总

news2024/11/19 7:33:58

gcc常用选项

选项含义描述
-o filename指定输出文件名,在编译目标代码时,可不选,不指定filename时,默认文件名是a.out
-c只编译不链接,生成目标文件.o
-S只编译不汇编,生成汇编代码
-E只进行预编译,不做其他处理
-g 生成的执行文件中包含调试信息
-v打印编译过程中的命令行信息和编译器的版本号
-I dir在头文件的搜索路径列表中添加dir目录
-L dir在库文件的搜索路径列表中添加dir目录
-static链接静态库
-library链接名为library的库文件
-Dmacro定义指定的宏,使它能够通过源码中的#ifdef进行检验
-O -O2 -O3将优化状态打开,该选项不能和-g选项联合使用
-Wall将警告看做是错误,发生警告时取消编译
-Werror在发生警告时取消编译操作,将警告看作是错误
-w禁止所有的报警
-pedantic严格要求符合ANSI标准

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 gdb常用命令

命令含义描述
file装入想要调试的可执行文件(需携带调试信息)
run执行当前调试的程序
kill终止正在调试的程序
step执行一行或者进入函数内部
next执行一行但不进入函数内部
break设置断点
print打印表达式或者变量
list列出可执行文件中的源代码的一部分
quit退出gdb
watch监视变量而不管何时它被改变
backtrace回溯跟踪
frame n定位到发生错误的代码段,n为backtrace命令输出的栈的序号
examine查看内存地址中的值
jump是程序跳转执行
signal产生信号量
return强制函数返回
call强制函数调用
make使用户不退出gdb就可以重新产生可执行文件
shell使用户不离开gdb就可以使用LInux的shell命令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 break用法

命令描述
break <function>指定函数断点,C++可以使用class::function或者function(type,type)格式指定函数名
break <linenum>指定行号断点
break +offset当前行号的前面offset行停住
break -offset当前行号的后面offset行停住
break filename:linenum在源文件filename的linenum行停住
break filename:function在源文件filename的function处停住
break *address在程序运行的内存地址处停住
break没有参数,表示下一行停住
break ...if <condition>条件断点

 

 

 

 

 

 

 

 

 

 

 display命令

命令描述

undisplay <dnums...>

delete display <dnusm...>

删除自动显示,dnums为已经设置了的自动显示的编号,同时删除几个,可以使用空格隔开,删除一个范围可以使用-例如2-5

disable display <dnums...>

enable display <dnums...>

不删除自动显示的设置,而只是让其失效或者恢复
info display 查看display设置的自动显示信息

 

 

 

 

 

 

list命令

命令描述
list <linenum>显示linenum周围的源程序
list <function>显示函数function周围的源程序
list显示当前行后面的源程序
list -显示当前行前面的源程序
set listsize <count>设置一次显示源代码的行数
show listsize查看当前listsize的设置
list <first>,<last>查看从first到last行之间的源代码
list ,<last>显示从当前行到last行之间的源代码
list +向后显示源代码

 

 

 

 

 

 

 

 

 

 

 (学习视频c++调试技术_哔哩哔哩_bilibili)

部分资料来源上述视频。

 vscode终端输入gdb main启动调试

输入layout split 查看源代码和汇编代码

 远程调试的launch.json文件

 

 附加进程调试(c++调试技术-3-附加进程调试-多线程调试_哔哩哔哩_bilibili)

-exec print n  调试控制台执行gdb命令

 查看内存地址  -exec x /20bx  地址   (b表示字节显示,x表示十六进制)

-exec x /20bc 地址 (c表示字符显示)

-exec x /20bs 地址 (s表示字符串显示)

查看断点 info breakpoints  简写 i b 断点编号  查看指定断点信息,如果不指定断点编号,则查看所有断点信息。

查看栈信息  bt简写

删除断点:

命令描述
clear 函数名删除函数名断点
clear 函数名(参数)根据函数签名删除断点
clear 行号删除行断点
clear 文件名:行号
delete 删除断点  简写 d 或者 del

delete 断点编号 

delete 断点范围

delete 所有断点

disable 简写dis,断点编号或者断点范围 n1-n2dis  5-7
enable 简写en,ena,断点编号 或者范围en 5-7
enable once 断点编号只断一次
enable count 数量 断点编号断指定次数
ignore 断点编号 次数忽视前多少次

 

 

 

 

 

 

 

 

 

 

 

 

 

 保存断点  save breakpoints  point(文件名)

读取断点  gdb filename -x  point(保存断点的文件名)

gdbserver远程调试:

远程服务器运行 gdbserver  ip:port  ./main

本地进入gdb,执行 target remote ip:port  这里的ip和port 就是远程机器的IP和port,远程调试不能使用run命令,使用c命名。

gdbserver远程attach:先运行程序,在通过ps -ef | grep main 获取pid,

再执行gdbserver ip:port --attach pid 

本地进入gdb,执行 target remote ip:port  这里的ip和port 就是远程机器的IP和port,远程调试不能使用run命令,使用c命名。

 查看栈:

bt 显示调用栈信息

bt 帧数  显示指定数量的栈(编号从小到大)

bt -栈帧数  显示指定数量的栈帧(栈帧编号从大到小)

backtrace full 显示所有栈帧的局部变量

frame 简写 f,显示当前栈帧

f 帧编号,切换指定栈

up n向上移动n个位置

down n向下移动n个位置

info locals 查看当前帧的局部变量

 

 gdb attach pid  附加进程

生成core文件  gcore  main-release.core, 然后detach,退出后执行 gdb  main main-release.core

查看线程  i thread

 切换线程 thread 线程号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis:The error occurred while setting parameters;foreach语句不生效

根本原因就是在参数上&#xff0c;列举一下可能的原因&#xff1a; 1.sql语句中的传的参数类型和数据库中不一致 2.#{}写成${} 3.也有说是在sql语句后加了“&#xff1b;”有影响的 本人sql语句如下&#xff1a; 该条语句的参数是list&#xff0c;list中存着试卷对象&#xff…

雅思口语回答拿不准,chatgpt担任考官帮你润色文本

目录 你现在是一位雅思口语考官&#xff0c;请你现在以雅思口语的评价标准&#xff0c;来对于我的回答进行打分 问题是“Do you like wearing T-shirts?”&#xff0c;我即将在下一句话中进行回答&#xff0c;请你进行评价&#xff0c;请等待我的回答&#xff0c;请等待我的回…

【Linux】编辑器 vim

1、vim的基本概念 vi/vim【一款文本编辑器】vim【一款多模式编辑器】vi/vim 的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是 vim 是 vi 的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0…

Android高德地图截屏功能(可包含自定义控件)

一、不包含自定义控件 地图 SDK 支持对当前屏幕显示区域进行截屏&#xff0c;可以对地图、覆盖物&#xff08;包含信息窗口&#xff09;、Logo进行截取屏幕&#xff0c;这其中不包括地图控件、Toast窗口。 详细示例如下&#xff1a; // 对地图进行截屏aMap!!.getMapScreenSho…

ajax day3

3、将普通对象转为查询参数字符串形式&#xff1a; 创建URLSearchParams参数&#xff0c;再用toString方法转为字符串 4、xhr对象 请求参数&#xff1a;body参数 5、promise promise对象一旦被兑现或拒绝&#xff0c;就是已敲定了&#xff0c;状态无法再被改变。故此处先执行…

基于Python和mysql开发的智慧校园答题考试系统(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的智慧校园答题考试系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

第十章 数组和指针

本章介绍以下内容&#xff1a; 关键字&#xff1a;static 运算符&#xff1a;&、*&#xff08;一元&#xff09; 如何创建并初始化数组 指针&#xff08;在已学过的基础上&#xff09;、指针和数组的关系 编写处理数组的函数 二维数组 人们通常借助计算机完成统计每月的支出…

konisGraph学习。复杂查询优化记录

最近有需求是查两个公司之间的投资关系 比如 a和b之间有哪些直接投资和间接投资。 例如 a->b a->e->b a->c->d->b b->f->a 需求是查出7跳以内的ab之间的投资关系 v的标签是company_name,属性是company_name ,eid 其中ideid e的标签是inv…

恒林家居引入纷享销客CRM系统,领跑家居行业营销数字化进程

近日&#xff0c;恒林家居股份有限公司&#xff08;&#xff08;股票代码&#xff1a;603661以下简称为“恒林家居”&#xff09;携手纷享销客在湖州召开了CRM项目启动会。双方领导及核心项目人员齐聚一堂&#xff0c;展开了深度交流并达成了重要共识。 作为家居行业的领军企业…

查看创建好的数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: show create database 数据库名称; 案列:查看testing数据库信息 mysql> show create database testing; ------------------------…

源代码防泄密和工控安全方案简介

客户情况 某新能源电池企业专业从事于新能源锂离子动力电池和储能电池的研发、生产和销售&#xff0c;具备电芯、模组、BMS及Pack的完整资源开发能力。公司致力于通过持续不断地改进电池技术&#xff0c;为全球锂离子动力和储能领域提供数字化精准高效的新能源解决方案。 该企…

【Spring Boot 源码学习】OnClassCondition 详解

Spring Boot 源码学习系列 OnClassCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. 多处理器拆分处理3. StandardOutcomesResolver 内部类4. getMatchOutcome 方法 总结 引言 上篇博文带大家从源码深入了自动配置过滤匹配父类 FilteringSpringBootCondition&#x…

说完 Java 的 Abstract 后再来说说接口 (interface )

如你对 Abstract 修饰的抽象类不是非常了解的话&#xff0c;请自行先考古下。 这篇文章需要对 Java 定义过的抽象类有一些基本的了解才可以。 抽象类和抽象方法 用 Abstract 修饰的类&#xff0c;叫做抽象类&#xff0c;那么用 Abstract 修饰的方法叫做抽象方法。 在 Java 中…

LabVIEW更改Tab所选标签的颜色

LabVIEW更改Tab所选标签的颜色 在开发过程中&#xff0c;有时会出现要将不同tab页设置不同颜色的情况。此VI允许编程方式更改前面板选项卡控件上选项卡的颜色。它是突出显示所选选项卡的理想选择 在某些应用程序中&#xff0c;用户希望在按下时突出显示选项卡控件。此VI使用事…

算法从未放弃你,放弃你的只有你自己

在人生的旅程中&#xff0c;我们常常会遇到各种挫折和困难。有些人在面对困境时&#xff0c;会选择放弃&#xff0c;将责任归咎于命运或外部环境。然而&#xff0c;算法教给我们一个重要的道理&#xff1a;永远不要放弃 当我们遇到问题或挑战时&#xff0c;算法可以帮助我们找到…

AWT中常用组件

基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件&#xff08;也可当做单选框组件使用&#xff09; CheckboxGroup 用于将多个Checkbox 组件组合成一组&#xff0c; 一组 Checkbox 组件将只有一个可以 被选中 &#xff0c; 即全部变成单…

python 使用requests爬取百度图片并显示

爬取百度图片并显示 引言一、图片显示二、代码详解2.1 得到网页内容2.2 提取图片url2.3 图片显示 三、完整代码 引言 爬虫&#xff08;Spider&#xff09;&#xff0c;又称网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;是一种自动化程序&#xff0c;可以自动地浏览…

C++数据结构--红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的节点的定义四、红黑树结构五、红黑树的插入操作参考代码 五、代码汇总 一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过…

数字花园的指南针:微信小程序排名的提升之道

微信小程序&#xff0c;是一片数字花园&#xff0c;其中各种各样的小程序竞相绽放&#xff0c;散发出各自独特的芬芳。在这个花园中&#xff0c;排名优化就像是精心照料花朵的园丁&#xff0c;让我们一同走进这个数字花园&#xff0c;探寻如何提升微信小程序的排名优化&#xf…

Idea项目爆红

解决办法&#xff1a; 方案一&#xff1a;重新加载Maven依赖 方案二&#xff1a;清除缓存 方案三&#xff1a; 在当前项目下执行以下命令&#xff0c;重新生成.iml文件 mvn idea:module