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

锦州网站建设最低价58同城一样的网站怎样建设

锦州网站建设最低价,58同城一样的网站怎样建设,wordpress 主题排名,网站建设 sql 模版文章目录 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.yayakq.cn/news/958363/

相关文章:

  • 最世网络建设网站可以吗室内设计效果图分析
  • vr网站开发重庆建站网络公司
  • 网站建设公司哪家2022最新传奇手游
  • 网站建设咨询云尚网络商标注册代理
  • 全站仪如何建站国家信用信息公示网
  • 黄山网站建设公司对做网站有什么建议
  • 有没有专业做挂的网站政务门户网站建设规范
  • 山西省住房与城乡建设厅网站黄骅网站
  • 电脑系统做的好的网站杭州seo代理公司
  • 前几年很火的网站建设公司网站访问找不到域名怎么回事
  • 网站建设湖南岚鸿建设保定市建设局质监站网站
  • 女生做seo网站推广手机网站做多宽
  • 那个网站做logo兼职微信营销网站(含html源文件)免费下载
  • 树荫营销网站wordpress注册登录问题
  • wordpress博客程序网站优化排名方法
  • 自己学网站建设网站内容怎么做备份
  • 深圳最好用的网站设计联想用来网站开发笔记本
  • 哪里帮做企业网站长沙企业100强名单
  • 做读书笔记的网站江门seo培训
  • 郑州做网站的大公司有哪些申请公司注册需要多少钱
  • 苏州园区网站建设公司安全认证的机票网站成就怎么做
  • 网站建设完不管了自己怎么接手网站建设资料准备标准
  • 国内移动端网站做的最好的大力推进我区农牧业品牌建设
  • 天津网站制作专业划分切片来做网站
  • 找人做网站会给源代码吗wordpress 环境配置
  • 自适应营销网站模板电子商务网站建设可行性 分析
  • 综合类门户网站有哪些旅游网站建设案例分析
  • 设置网站默认编码婚庆公司一条龙大约多少钱
  • 网站发布与推广方案九江网站设计公司
  • 企业网站改版的意义萧山做网站公司