前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux调试器-gdb使用

Linux调试器-gdb使用

作者头像
南桥
发布2024-03-14 09:12:36
970
发布2024-03-14 09:12:36
举报
文章被收录于专栏:南桥谈编程南桥谈编程
背景知识
  • 程序的发布方式有两种,debug模式和release模式 Debug是开发者模式,而用户最终使用的是release。Debug模式下程序是可以被调试的,release模式下不可调试。Debug模式下编译器形成可执行程序的时候,会给可执行程序添加调试信息 。
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

生成Debug模式下的文件:gcc -o process-Dubeg process.c -g

我们发现Dubge文件体积比release文件体积要大一些,因为Debug文件里面多了调试信息并且我们会发现,Dubge文件和release文件都可以运行

代码语言:javascript
复制
readelf process.exe-Debug -S//查看一个可执行程序对应的二进制文件

readelf process.exe-Debug -S | grep debug//将二进制文件中和debug有关的部分过滤出来

gdb命令

为了演示gdb命令的使用方法,以下面这个代码为例:

代码语言:javascript
复制
#include<stdio.h>    
    
int AddToTarget(int start,int end)    
{    
  int i=start;    
  int sum=0;    
  for(;i<=end;i++)    
  {    
    sum+=i;    
  }    
  return sum;                                                                                                                               
}    
int main()    
{    
  printf("run begin...\n");    
    
  int res=AddToTarget(1,100);    
  printf("%d\n",res);    
    
  printf("run end...\n");    
    
  return 0;    
}    
~
  • gdb binFile进入gdb环境,其中binFile是一个可执行程序
  • q或者quit指令可退出
  • list或者l:现实binFile源代码,接着上次的位置往下列,每次10行。
  • l num或者list num:num是行号,将源代码的第num行在中间位置显示,每次10行。
  • l Fun_name或者list Fun_name:Fun_name是函数名,列出某个函数的源代码
  • 如果有多个文件,你只想查找其中一个文件,可以l 文件名:num/Fun_name或者list 文件名:num/Fun_name

Tip: gdb会默认记录上一步操作,如果想要显示整个文件内容,首先可以从最开始显示l 0,紧接着直接l,每次显示10行,直到结束为止。此时就把所有内容显示出来了。或者l 0之后,连续按Enter键,直到完全显示。

  • run或者r:运行,类似于VS中的F5

程序正常执行,这里程序只是运行,无法调试

  • b num或者b Fun_name:打断点,可以在行号num处打断点,可以在名为Fun_name的函数处打断点。另外,断点只能一个一个打。
  • info b或者i b:查看断点信息
  • d num:num为断点编号
  • disable num:num为断点编号,忽略某个断点,即关闭某个断点
  • enable num:num为断点编号,启用该断点
  • nnext:逐过程,单条执行,当有函数调用时,不会进入函数内部。
  • sstep:逐语句,进入函数调用
  • p 变量:打印变量的值和地址
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay num:取消对先前设置的那些变量的追踪,其中num是先前设置的跟踪变量所对应的编号
  • until x:跳至x行,可以让我们快速的运行代码块
  • finish:执行完当前函数返回,然后停下来等待命令
  • continuec:从当前断点直接运行到下一个断点处
  • set var:修改变量的值。
  • bt:查看各级函数调用及参数。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景知识
  • gdb命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档