首页 > 系统相关 >0Linux GDB学习笔记

0Linux GDB学习笔记

时间:2024-05-28 22:30:18浏览次数:28  
标签:0Linux 函数 gdb 笔记 行号 GDB 线程 函数调用 断点

Linux GDB使用

目录

文章目录

先编译文件

-g:包含调试信息
-o:控制优化级别

请添加图片描述

1.检查安装

gdb --version
请添加图片描述

1.1 安装GDB

sudo apt-get install gdb

2.启动GDB

直接调试目标程序:gdb ./hello_server
附加到进程ID:gdb attach pid
调试core文件:gdb filename corename

3.退出GDB

命令:q 然后回车 或者 Ctrl + d 

4.设置断点

4.1 在指定行号处设置断点

b + 行号

4.2 在指定函数名处设置断点

b 源文件:函数名

4.3 在指定源文件和行号处设置断点

b 源文件:行号

4.4查看断点信息

info b

4.5删除断点

清除某个断点 (gdb) delete 4
清除所有断点 (gdb) delete 

请添加图片描述

请添加图片描述

5.运行

有断点运行到断点
r

5.1 逐过程:遇到函数调用时不会进入函数内部。

n

5.2 逐语句:遇到函数调用时会进入函数内

s

6.查看和修改变量

打印变量值:p 变量名
修改变量值:set var 变量名 = 新值
追踪变量:display 变量名,会在每次程序停止时显示变量值。
取消追踪:undisplay 变量名编号

7.查看函数调用栈

bt
鄙人样例
请添加图片描述设置断点
请添加图片描述
#0 表示最内层的函数调用
#1
#2
#3 表示 Init_ShellState的调用,它在 main.c调用。
#4 表示 main 函数的调用,它是程序的入口点
请添加图片描述

7.查看源码和行号

l

8.打印变量的的值

p 变量名

请添加图片描述

多线程调试(待)

查看线程信息:info thread
切换线程:thread 线程编号
对指定线程执行命令:thread apply 线程编号 command

设置线程锁(待)

锁定线程:set scheduler-locking on
解锁线程:set scheduler-locking off
单步执行时锁定线程:set scheduler-locking step

9.总命令表

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

优秀文献推荐:
[Linux | 调试器GDB的详细教程【纯命令行调试】]https://blog.csdn.net/Fire_Cloud_1/article/details/129213449
请添加图片描述听歌曲看图,意想不到
希望今日工作/学习的你也能get到我的快乐…
请添加图片描述

参考文献:感谢!!
https://blog.csdn.net/lovely_dzh/article/details/109160337

标签:0Linux,函数,gdb,笔记,行号,GDB,线程,函数调用,断点
From: https://blog.csdn.net/2302_79752447/article/details/139254024

相关文章

  • Latex笔记(一)
    趁机专业课结课作业的机会,稍微练一练Latex,网上的模板用在作业上稍微花哨了些许,所以“帮帮我,AI先生”,(练着个真的有意义吗,把文档扔给AI,她都能直接生成了。如果以后我们玩到的游戏里的NPC是靠AI来扮演的,你觉得是增强了代入感,还是觉得这不可去呢?)点击查看代码\documentclass[a4paper......
  • SQL刷题笔记day5
    SQL218题目我的错误代码:selectde.dept_no,de.emp_no,s.salaryfromemployeesejoindept_empdeonde.emp_no=e.emp_nojoinsalariessons.emp_no=e.emp_nowherede.dept_nonotindept_manager.dept_no#notin好像不能直接这样用这里报错正确代码SELECT......
  • 《基于物理一致性的全息成像自监督学习》精读笔记
    基于物理一致性的全息成像自监督学习原文链接:https://www.nature.com/articles/s42256-023-00704-7三句话评价为计算成像与显微学中的逆问题的求解提供了新的方法;根据物理一致性(也即物理规律)构造自监督损失函数,实现模型的训练;在构造合理的情况下,所述方法可以实现基于超声波......
  • 算法课程笔记——素数朴素判定&埃氏筛法
    算法课程笔记——素数朴素判定&埃氏筛法sqrt返回浮点数,而且这样可防溢出优化i*i会更快......
  • BookxNote Pro 宝藏 PDF 笔记软件
    一、简介1、BookxNotePro是一款专为电子书阅读和学习笔记设计的软件,支持多种电子书格式,如PDF和EPUB,能够帮助用户高效地管理和阅读电子书籍,同时具备强大的笔记功能,允许用户对书籍内容进行标注、摘录和思维导图绘制等操作。它还支持将笔记导出为多种格式,如Anki、Xmind、PDF等......
  • 现代操作系统第三章读书笔记
    现代操作系统第三章读书笔记***3.3.1分页3.4页面置换算法3.5分页系统中的设计问题前面讨论了分页系统如何工作,介绍了基本的页面置换算法。当然,只了解基本机制是不够的。要设计一个系统,必须知道如何是这个系统工作的更好,需要从全局考虑一些问题。下面是一些能过使得整个系统......
  • Vue笔记
    1、快速上手1)概念2)创建实例3)插值表达式{{}}插值表达式是一种Vue的模板语法。(1)作用:利用表达式进行插值,渲染到页面中表达式:是可以被求值的代码,JS引擎会将其计算出一个结果(2)语法:{{表达式}}<h3>{{title}}</h3><p>{{nickname.toUpperCase}}</p><p>{{age>=18?'成年':'未成年'......
  • 阿赵UE引擎C++编程学习笔记——文件夹操作和文件读写
      大家好,我是阿赵。  这次学习一下在UE里面使用C++的API操作文件读写和文件夹操作。一、UE引擎获取相关路径  获取到路径一般是相对路径,使用FPaths::ConvertRelativePathToFull转换后,可以获得完整的绝对路径。FStringcontentDir=FPaths::ProjectContentDir();......
  • 《C++primer》读书笔记---第八章:IO库
    8.1IO类下表列出的是一些IO类型:  为了支持使用宽字符的语言,标准库定义了一组类型和对象来操纵wchar_t类型的数据。宽字符版本的类型和函数的名字以一个w开始,例如,wcin、wcout、wcerr是分别对应cin、cout、cerr的宽字符类型。注:IO对象无拷贝或赋值ofstreamout1,out2;......
  • Python学习笔记-文件操作与CSV格式
    文件打开和关闭程序中的数据都存储在内存中,当程序执行完毕后,内存中的数据将丢失。文件可以用来进行数据的长期保存。open函数打开一个要做读/写操作的文件,打开文件后会返回一个文件对象,利用该文件对象可完成数据的读写操作。其常用形式为:open(filename,mode='r')#file......