首页 > 其他分享 >gdb基本调试命令

gdb基本调试命令

时间:2024-04-06 19:59:12浏览次数:14  
标签:命令 gdb 线程 进程 断点 hello 调试

基本调试命令

编译程序时要加上-g,之后才能使用gdb调试:

gdb hello 	//gdb + 可执行程序
break(b) 10 //在第10行设置断点,简写b
info b		//查看断点信息
run(r)		//运行,运行到断点停止
next(n)		//执行当前行语句
print(p)    //显示变量的值
continue(c) //继续运行程序,直到遇到下一个断点
quit(q) 	//退出调试
step(s) 	//执行当前语句,如果语句是函数调用,则进入函数单步执行
list  		//显示源代码
bt			//查看函数调用堆栈

core dump

当出现了段错误:

ulimit -a  			//查看系统参数
ulimit -c ulimited	//把core文件的大小设为无限制
./hello    			//再次执行出错程序,会产生一个core文件
gdb hello core		//会看到程序哪一行导致的错误

调试正在运行的程序

gdb hello -p 进程编号   //ps -ef|grep hello 查看进程编号;进入gdb模式后,程序就会暂停

调试多进程

set follow-fork-mode parent //调试父进程,如果什么都不设置,默认调试父进程
set follow-fork-mode child  //调试子进程

//设置调试模式,on表示调试当前进程的时候,其他的进程继续运行
//如果用off,调试当前进程的时候,其它的进程被gdb挂起
set detach-on-fork[on|off] //缺省是on
info inferiors 		       //查看调试的进程
inferior 进程id		      //切换当前调试的进程

调试多线程

ps -aL|grep hello	        //查看正在运行的线程
pstree -p 主线程id	          //查看主线程和子线程的关系
info threads	            //查看所有线程信息
thread 线程id				   //切换线程
set scheduler-locking on	//只运行当前的线程,其它线程全部挂起
set scheduler-locking off	//运行全部的线程
thread apply 线程id	cmd	   //指定某线程执行某gdb命令
thread apply all cma		//全部的线程执行某gdb命令

服务器程序运行日志

设置断点或单步跟踪可能会严重干扰多进程/多线程之间的竞争关系,导致我们看到的是一个假象。一旦我们在某一个线程设置了断点,该线程在断点处停住了,只剩下另一个线程在跑,这时并发的场景已经被完全破坏了,通过调试器看到的只是一个和谐的场景(理想状态)。

可以使用输出log日志(将日志输出到屏幕上或输出到文件中)解决上述问题

标签:命令,gdb,线程,进程,断点,hello,调试
From: https://blog.csdn.net/PM26000/article/details/137436593

相关文章

  • python 在命令行中选择文件路径的交互程序
    直接上代码,懒得多说1importcolorama2colorama.init()3fromcoloramaimportFore,Back,Style4importos5importre67class路径选择器:8def__init__(self):9当前路径=''10选择集=[]11路径深度......
  • npm常用的命令
    npm英文全称:nodepackagemanager。npm是JavaScript编程语言的包管理器。npm允许开发人员通过管理项目的依赖关系来轻松地共享和重用代码。在JavaScript社区中广泛使用,它提供了用于安装、管理和更新包等常用的命令。常见的npm命令有:1.初始化一个新的npm包,生成一个`package.js......
  • [转帖]docker输入多行命令
    docker相关学习资料下载地址: docker相关资料合集Docker输入多行命令在使用Docker进行容器管理时,我们经常需要在容器内部执行多行命令。本文将介绍Docker中输入多行命令的几种方式,并提供相应的代码示例。1.使用Shell的行连字符在Docker中,我们可以使用Shell的行连字......
  • lsblk命令参数详解
    lsblk命令用于列出块设备的信息,包括磁盘、分区和挂载点等。下面是lsblk命令的一些常用用法和示例讲解: lsblk:简单地运行lsblk命令会列出所有块设备的基本信息,包括设备名、大小和挂载点等。lsblk [设备名称]:显示指定设备的信息,可以是磁盘或分区的设备名称。lsblk -a:显示所......
  • FFmpeg图片与视频相互转换命令
    FFmpeg图片与视频相互转换命令命令简介该命令可以实现对图片和视频之间的相互转换,即:图片转视频和视频转图片。视频转图片命令的格式ffmpeg-i[输入文件][滤镜参数(可选)][输出文件]输入文件指定你要转哪个视频文件。滤镜参数详见FFmpeg滤镜命令简介,并且可以添加编解码......
  • FFmpeg音视频裁剪和合并命令
    FFmpeg音视频裁剪和合并命令命令简介裁剪音视频和合并音视频。合并命令ffmpeg-i[输入文件1]-i[输入文件2]...[滤镜参数][输出文件]输入文件指明输入你要合并的文件,可以有多个输入文件。滤镜参数可以为合并的文件添加滤镜,详细参数查看ffmpeg滤镜命令中的参数。输......
  • FFmpeg滤镜命令
    FFmpeg滤镜命令命令简介该命令可以给视频添加水印,修改视频的大小,调整视频的色彩等等等等;对音频可以做到调整音量,去噪等等等等。命令格式ffmpeg-i[输入文件]-filter_complex["参数"][输出文件]输入文件填写你要操作的视频。如果你用到了overlay参数,记得在这里再添加上覆......
  • FFmpeg从原始数据中提取YUV或PCM数据命令
    FFmpeg从原始数据中提取YUV或PCM数据命令命令的作用这些被提取出的YUV数据和PCM数据可以用于多媒体的处理或应用,它们可以用于视频分析(如人脸识别,追踪目标,动作检测);图像处理(如颜色校正,图像处理算法);视频压缩,声音分析等等等等。命令的格式ffmpeg-i[输入的参数][输入的文件......
  • FFmpeg推拉流命令
    FFmpeg推拉流命令命令简介它可以将本地的视频/音频流推送到服务器,也可以将服务器上的音视频流拉到本地。推流命令的命令格式ffmpeg-re-i[输入文件]-c:v[视频编码器]-c:a[音频编码器]-f[输出格式][推流地址]参数解析-re表示采用实时模式,以原始速度推流;-i[输入......
  • gdb 环境问题:Backtrace stopped: previous frame identical to this frame (corrupt s
    背景虽然才刚进入新环境,但是由于项目交付节点临近,领导主要让我分析、解决以前遗留的问题,保证软件的稳定性。其中有一个问题现象是:片间通信进程(负责SOC和MCU交互的服务)偶现阻塞问题。经过短暂的分析,我怀疑是因为资源竞争导致的死锁问题。针对死锁问题,我认为有两种分析方式......