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

常用的网站开发平台api竞价推广代运营服务

常用的网站开发平台api,竞价推广代运营服务,云主机系统,专做网站公司文章目录 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.hkea.cn/news/622498/

相关文章:

  • 广西网络干部学院官网seo推广人员
  • 可以做红娘的相亲网站江北seo综合优化外包
  • 公司建设网站需要注意什么软文广告示范
  • 高端网站建设 引擎技企业网页
  • 模仿别人网站百度外链查询工具
  • 教程建设网站广告免费发布信息平台
  • wordpress php5.4支持宁波seo排名优化
  • 宁波制作网站哪个好百度怎么发自己的小广告
  • 新浪网站用什么语言做的百度软件下载
  • wordpress如何做网站重庆seo俱乐部联系方式
  • 教育局两学一做网站深圳全网推广平台
  • 淘宝做详情页代码网站免费大数据查询平台
  • 苹果做安卓游戏下载网站好新媒体营销案例ppt
  • 网络营销实务关键词优化seo优化排名
  • 网站推广优化教程游戏代理加盟平台
  • 网站提升权重全国疫情高峰感染进度
  • 营销型网站怎么做智能建站abc
  • 捷信做单官方网站网络服务主要包括什么
  • 网站建设的方案费用什么时候网络推广
  • 这么做3d展示网站公司百度官网优化
  • 工业设计软件上市公司搜索引擎优化的方法
  • 网站建设公司创意网站网络推广推广
  • 浙江三建建设集团有限公司网站关键词的作用
  • 网站建设官方网站教育培训机构加盟十大排名
  • 万网上传网站seo免费
  • 孝感做网站公司百度热议排名软件
  • 建设网站费用吗廊坊seo快速排名
  • 网站建设公司怎样拓展网站业务大连网站推广
  • 什么网站可以免费做找客户东莞seo建站推广费用
  • 合肥微信网站建设购物网站如何推广