基础教学:

https://www.cnblogs.com/chenmingjun/p/8280889.html

https://blog.csdn.net/Stone_OverLooking/article/details/78493331?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159296170919195162552731%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159296170919195162552731&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_ctr_v4-1-78493331.ecpm_v1_rank_ctr_v4&utm_term=gdb%E8%B0%83%E8%AF%95c%2B%2B

https://blog.csdn.net/qq_33053671/article/details/106410641?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

大型工程:(针对调试CMakeLists.txt文件)
可打开gdb图形界面调试:

gdb a.out --tui

调试CMakeLists.txt文件前提是在CMakeLists.txt文件中要添加下面这一行:

#dubug 模式------------------这个非常重要,否则无法进入断点
set (CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -g")

GDB常用指令

一、基本指令
编程设置:1.需要加-g,不能有-s,如g++ -g main.cpp
常用指令
(gdb)gdb e(或者输入gdb) (gdb)file e //进入gdb,执行e文件
(gdb)info breakpoints //可使用info查看断点相关的信息
(gdb)break 7 //以行号设置断点
(gdb)break function_name //以函数名设置断点
(gdb)clear 行号 //删除这行的断点
(gdb)clear 函数名 //删除该函数的断点
(gdb)delete breakpoints n //删除第n次(指定编号)设置的断点
(gdb)clear //删除程序中所有的基于行设置的断点
(gdb)delete //删除程序中所有的断点
(gdb)r //执行程序
(gdb)n //单步调试

(gdb)s //进入函数内部调试
(gdb)c //执行到下一个断点
(gdb)print 变量或表达式 //打印变量或表达式当前的值。
(gdb)print 变量=值 //对变量进行赋值
(gdb)whatis 变量或表达式 //显示变量类型
(gdb)set variable 变量=值 //变量赋值

二、断点管理
1.以行号设置断点
(gdb)break 7
(gdb)run
2.以函数名设置断点
(gdb)break function_name
(gdb)run
3.以条件表达式设置断点
(gdb)break 7 if i99
(gdb)run
4.另一种,以表达式设置断点的方法
(gdb)watch i99
这个命令必须在变量i被定义之后才会成功运行,为了解决这个问题,首先在变量 i 被定义的后一行设置中断,然后使用run命令运行程序,程序暂停后就可以使用watch i==99设置断点了。
##############################
单步执行
(gdb)next
#############################
查看当前设置的断点信息
(gdb)info breakpoints
###############################
使中断失效(断点仍然存在)或有效
(gdb)info breakpoints
(gdb)disable b_id //使中断失效,b_id 为中断编号
(gdb)info breakpoints
(gdb)enable b_id //使中断有效,b_id 为中断编号
(gdb)info breakpoints
##############################
删除断点
clear : 删除程序中所有的断点
clear 行号 : 删除这行的断点
clear 函数名 : 删除该函数的断点
delete b_id1 b_id2 … : 删除指定编号的断点
##################################
查看和设置变量值
1.print命令
print 变量或表达式:打印变量或表达式当前的值。
print 变量=值:对变量进行赋值。
print 表达式@要打印的值的个数n:打印以表达式开始的n个数
2.whatis命令:显示某个变量或表达式值的数据类型
whatis 变量或表达式
例子:

3.set命令:给变量赋值
set variable 变量=值
【提示】set命令还可以针对远程调试进行设置,可以用来设置gdb一行的字符数等。
4.多线程

查看线程的一些信息
1.查看进程:info inferiors
2.查看线程:info threads
3.查看线程栈结构:bt
4.切换线程:thread n(n代表第几个线程)
5.只运行当前进程:set scheduler-locking on
6.所有线程并行:set scheduler-locking off
7.切换线程 :thread ID(1,2,3…)
8.thread apply all command :让所有线程执行命令command(比如thread apply all bt)

gdb介绍:(下面这条链接介绍GDB也很详细)

https://blog.csdn.net/u011068702/article/details/53925415?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159341954719725222443097%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159341954719725222443097&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-53925415.ecpm_v1_rank_ctr_v4&utm_term=gdb%E8%B0%83%E8%AF%95%E5%91%BD%E4%BB%A4

https://blog.csdn.net/sunzhao1000/article/details/103353631?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159341879019724839211292%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159341879019724839211292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_ctr_v4-1-103353631.ecpm_v1_rank_ctr_v4&utm_term=gdb+%E8%B0%83%E8%AF%95CMakeLists.txt

linux下cmake编译C++代码为可执行文件,多版本

https://blog.csdn.net/sunzhao1000/article/details/103293877

GDB调试c++代码相关资料相关推荐

  1. 借助gdb调试glibc代码学习House of Orange

    转自: https://bbs.pediy.com/thread-251195.htm house_of_orange https://www.jianshu.com/p/1e45b785efc1 借 ...

  2. OAI项目GDB调试及代码分析

    OAI项目GDB调试及代码分析 如果想使用GDB调试工具对项目进行调试,首先需要在编译时加入调试信息. 在完成之前的对eNB和UE的编译之后,使用作者写的编译脚本,同时加上-g选项加入调试信息 ./c ...

  3. GDB调试之前的相关设置,会使程序调试起来,事半功倍

    GDB调试之前的相关设置: https://blog.csdn.net/QIBAOYUAN/article/details/6116265

  4. 【汇编优化】之linux下如何利用gdb调试汇编代码

    1.gdb调试汇编代码 (1).假设有如下代码,test.c /*test.c*/ void main() {int a, int b, int c;a = 1;b = 2;add_mmx(a, b, ...

  5. 学会使用 GDB 调试 Go 代码

    大家好,我是煎鱼. 上一篇文章<一个 Demo 学会使用 Go Delve 调试>我们详细介绍了 Go 语言如何使用 Delve 进行排查和调试,对于问题的解决非常的有帮助. 但调试工具肯 ...

  6. gdb 调试java进程_使用GDB调试JNI代码

    本文链接:http://blog.csdn.net/kongxx/article/details/7329515 最近在碰到一段JNI代码不停的出现core dump,用gdb看了一下core文件,信 ...

  7. 用gdb调试core文件

    GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成 ...

  8. 【Linux学习】GDB调试器基本命令必知必会(一)

    本文介绍Linux下GDB调试器常用的基本命令. 测试均在Ubuntu12.10下完成. 先看看GDB调试的效果图: 对应的源代码: //插入排序,GDB调试测试代码 #include <std ...

  9. linux卸载gdb命令,【Linux学习】GDB调试器基本命令必知必会(一)

    本文介绍Linux下GDB调试器常用的基本命令. 测试均在Ubuntu12.10下完成. 先看看GDB调试的效果图: 对应的源代码: //插入排序,GDB调试测试代码 #include int x[1 ...

最新文章

  1. 什么是CS/BS(一)转
  2. python课后题答案第五章_Python语言程序设计(美-梁勇)第5章习题解答
  3. 图象关于y轴对称是什么意思_数学概念丨“图象”与“图像”是有区别的 ,你知道吗?...
  4. 3d怎么把两个面拼接在一起_vr全景看房用什么软件做的?3D看房是怎么拍摄的?...
  5. python屏幕文字识别_学会python就是如此任性,15行代码搞定图片文字识别,附源码...
  6. Axure-----三级下拉菜单的具体实现过程
  7. 为 Joomla 而生的 Kunena 论坛安装手册
  8. Mutex和内存可见性
  9. 设计模式 代理模式(Proxy Pattern)
  10. 这5小段代码轻松实现数据可视化(Python+Matplotlib)
  11. VS2010编译log4cpp日志库
  12. BFS 算法框架套路详解
  13. Android后端工程师的要求,后端工程师的岗位职责和能力
  14. 奥密克戎“后遗症”,比病毒更可怕
  15. [疯狂Java]JDBC:事务管理、中间点、批量更新
  16. 计算机插补,第三章计算机数控装置的插补原理.doc
  17. stm32 printf打印出错,信息不完整解决办法
  18. 安装配置群晖 DS918+ NAS及常用技巧
  19. 2016全域大数据应用论坛11位嘉宾核心观点
  20. 借记卡、准贷记卡与贷记卡的区别

热门文章

  1. ios swift 聊天_iOS Swift上的加密聊天
  2. 将视频格式转换为gif图片格式
  3. win10下从源码运行Cura——环境配置(二次开发准备工作)
  4. java_剪刀包袱锤
  5. gpfs linux,GPFS安装搭建
  6. Python软件编程等级考试五级——20220319
  7. 一级计算机用什么软件处理照片,照片处理app哪个好_电脑处理照片的软件哪个好用_考试照片处理软件app...
  8. 关于一个童年小游戏的一些想法
  9. 竞品分析报告的几个错误
  10. 如安在Linux的把持琐屑下应用假造光驱