当前位置: 首页 > news >正文

网站制作乌鲁木齐注册网站查询

网站制作乌鲁木齐,注册网站查询,建筑培训机构排名前十,注册个网站域名多少钱一年文章目录 3. Linux调试器-gdb使用3.1 背景3.2 下载安装3.3 使用gdb查询3.4 开始使用 3. Linux调试器-gdb使用 3.1 背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须…

文章目录

  • 3. Linux调试器-gdb使用
    • 3.1 背景
    • 3.2 下载安装
    • 3.3 使用gdb查询
    • 3.4 开始使用


3. Linux调试器-gdb使用

3.1 背景

程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项


3.2 下载安装

debug模式的代码可以被调试,release模式的代码不可以被调试。

为什么一个可以被调试一个不可以被调试呢?

debug模式的代码形成可执行程序的时候会有调试信息,而release模式的代码没有。

我们可以先进入root账户安装一下gdb

sudo apt update            # 更新软件源
sudo apt install gdb      # 安装gdb

然后验证

# 检查gdb版本
gdb --version

3.3 使用gdb查询

对于一个文件我们不知道是debug还是release,就可以使用gdb来查询

我们先写一个Makefile

mycode:mycode.cgcc -o $@ $^
.PHONY:clean
clean:rm -f mycode

然后写一个mycode.c的文件,里面写一个hello linux

然后编译,使用gdb

eeba3f8195ebf7ba6bd1491b14563cff

(No debugging symbols found in mycode)意味着不是debug版本的。

退出gdb的话输入一个q,回车就行了。

还有个命令readelf -S mycode,可以读取

文件的二进制构成,可以看到里面没有debug

92a256dfe1ebda605a4281a80aa9f655

说明gcc编译默认是release编译的。

如果我们想要debug编译可以改一下代码:

67074cdc023ca749e2c68386258f9a32

这里的-g是使用debug,前面的mycode-debug是改个名字便于区分。

然后我们make一下,

2a5aa622ffeb68e7dd4a4dca9b0f76dd

出现了这个信息。


3.4 开始使用

  • gdb binFile 退出: ctrl + d 或 quit 调试命令:

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

  • list/l 函数名:列出某个函数的源代码。

  • r或run:运行程序。

  • n 或 next:单条执行。

  • s或step:进入函数调用

  • break(b) 行号:在某一行设置断点

  • break 函数名:在某个函数开头设置断点

  • info break :查看断点信息。

  • finish:执行到当前函数返回,然后挺下来等待命令

  • print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数

  • p 变量:打印变量值。

  • set var:修改变量的值

  • continue(或c):从当前位置开始连续而非单步执行程序

  • run(或r):从开始连续而非单步执行程序

  • 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

mycode.c

#include <stdio.h>int addToTop(int top)
{int res=0;int i=1;for(;i<=top;i++){res+=i;}return res;
}int main(){printf("debug begin\n");int top=100;int sum=addToTop(top);printf("sum:%d\n",sum);printf("debug end\n");return 0;
}   

执行编译生成的mycode-debug文件:

76d205c3f6d08ddee19c7361203e097e

输入命令进入交互模式

a6dd300f0112d47f79edd5616a902092

要调试首先要看到代码,我们可以输入list或者l

3f07e3def4d036f11326f6d9fdf890a4

不过这边只输出了10行,我们也可以使用list n来显示一下:

74b123ad7415bba215a24e38c9ccb5b7

也可以输完l 0后回车,一次出现10行。

fbdbadbdbf2826a0bf4a5fa2daad8e8d

直接输入r,因为没有断点就直接运行了。

c94e575e51e997a52d04895b95778982

我们一般可以打断点:

b 行号

fd442eca9b73d11af87e376dfb1bac36

这边打完断点怎么查呢?

可以使用info b来查询。

6952f4642f1716936c575a32ba79166a

怎么删除断点呢?

断点的删除可以使用:b 行号来删除,要注意这里的行号是Num这里的断点的行号。

这里的Enb的值有yny就是启用断点,n就是禁用断点。

4f4fdfa0beb7dfb99f001846fddfd989

如果我们想要看里面的i,就可以使用p i;如果我们想要看里面的i的地址,就可以使用p &i

每次都这么输入比较麻烦,我们就可以使用display

display 变量名:跟踪查看一个变量,每次停下来都显示它的值。

如果我们想让自己从一个断点到另一个断点,就可以直接使用continue(或c)。

也可以禁用断点而不是删除断点:disable breakpoints

http://www.dinnco.com/news/66829.html

相关文章:

  • 怎么做网站图片的切换图谷歌推广技巧
  • 网站建设必须要服务器吗制作链接的app的软件
  • 自己做的网站如何制作后台杭州网络推广
  • 公司和网站备案查询密码网站注册步骤
  • 如何做类似优酷的视频网站外贸建站与推广
  • 最专业的网站建设组织四川seo
  • 外贸网络推广哪家靠谱seo关键词
  • jsp动态网站开发赵增敏竞价托管外包
  • 重庆网站开发谷歌浏览器下载手机版安卓官网
  • 网站开发搜索功能怎么实现seo快速排名服务
  • 网站开发加盟商怎么做模板网站建站公司
  • 阜阳网站开发招聘百度刷seo关键词排名
  • 网站如何做直播轮播百度人工服务热线24小时
  • 做网站要找什么软件免费s站推广网站
  • 景安搭建wordpress上海优化网站公司哪家好
  • 大厂网站建设营销活动推广方案
  • wordpress 文章版权 插件北京推广优化经理
  • 金融网站建设方案百度云搜索引擎入口网盘搜索神器
  • 东莞网站排名提升游戏网站交换友情链接
  • 大连网站设计室全球搜怎么样
  • 北京营销网站建设公司可以免费打开网站的软件下载
  • 做时时彩网站费用一站式海外推广平台
  • 广东知名网站视频号推广方法
  • 外国做营销方案的网站手机如何制作网站
  • 网站建设 网站开发营销推广的特点是
  • 数据库支持的网站怎么做今日军事头条新闻
  • 合法购物网站建设进入百度一下官网
  • 网络用户提要求找人帮忙做的网站免费网站入口在哪
  • 淘宝客怎么做自己网站推广专业网站建设
  • 做外贸网站设计上需要注意什么海外网络推广方案