当前课程知识点:互联网体系结构 >  第二周:Socket网络编程 >  编译、构建和调试 >  Video

返回《互联网体系结构》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《互联网体系结构》慕课在线视频列表

Video课程教案、知识点、字幕

他是一个调试器

就是在开始调试之前的

必须用程序中的调试信息

编译有调试的程序

也就是说我们在可执行文件里面要加入一些调试信息

这样gdb才能够调试所使用的变量、代码行和函数

如果要编译呢

我们就可以加了编译选项

也就说是在当前目录是吧

如果是不在当前目录

还需要加上相对路径和绝对路径

我们在gdb的hello

我们当前目录就是hello

就在当前目录下面是吧

file hello

我们也是指当前的目录

下面如果他当前执行的当前目录

不在当前目录

我们用绝对路径和相对路径来指明他所在的位置

就是装入这个程序之后

装入这个经过-g选项编译出来的可执行程序

这时

那我们用run命令他也可以简写为r来启动程序

如果一切正常

程序将执行到结束

结束此时

gdb并将重新获得控制

但是如果有错误

就是会怎样呢

这种情况

他gdb会控制

并在中断程序

从而让你检查所有事物的状态

如果运气好的话可以找到问题

你就说

正常情况下

我们gdb运行的程序它会直接结束

或者是中间运行出错

这时gdb会控制

出错的位置的一些状态

我可以检查的一种状态

我们来看一下

来看一下怎么用啊

这样编译出来的呢

编译的文件会更大一点

因为它里面带了符号

-g会大些

因为它里面有个符号表的吧

有了编译调试的信息

这时候呢

我们可以用gdb

这时候呢

我们是把这个

装载进来

这时侯我们运行run

他会输出HelloWorld对吧

这直接输出出来

但是我们也可以file

我们要调试一个程序的话

我们需要给他设置

断点对吧

可以在程序代码中的某一特定行或者函数中设置断点

这样gdb会在遇到断点

是中断执行

比如说这种断点

一开始执行

就让他中断

对吧就让他中断break

就是某一行

代码的行号也可以指明

也可以指明在那一行的位置的时候

他的变量的状态对吧

某种变量状态下

它会中断对吧

也可以有一个条件

有一个条件就是我们不设定断点

condition这个就是

你设定

condition就是变量状态

我们可以试一下这些

我们为了这个程序

先用简单的吧

先用简单的

我们这时候呢

我们是gdb把这个程序加载进来

我们这时候可以设置一个break

就是断点,你发现他会在第五行

有一个main是吧

他是设置了一个断点

如果这时候我run的话

他会执行到就是这个main函数

这个位置

那我们正常是可以用

来让他单步执行,next的单步执行

就是当前这个函数里面的子函数

他也是做一步

因为也做一步,直接next

他就把print函数给结束了

对吧结束了

如果我再next

这个函数程序就退出了对吧

这程序就已经退出了

那我们

如果我重新让他执行

重新让他执行,这时候呢

他执行到main又停下来的吧

断点又停下了

我用step单步执行

我们发现他就会进入到这个printf函数的内部

恩你发现他这地方执行的是libc里面的东西了

但是libc那边我们也没有跟踪

没有跟踪进去

所以我们不是在调试libc

所以他也没有

没有这些具体的信息

直到printf返回对吧

返回

这样结束对吧

这地方我们还可以

info break

我们可以把我们当前设置的所有断点给列出来是吧

断点给列出

还有break行号

我们也可以设置一个

break我们设置到第六行

这是第六行

如果我这个地方重新执行

我们重新来下刚进入了libc里啊

因为next耽误进入了step libc里面

我们调试的还是hello啊

我们这break

我们可以直接用b 第六行,你会发现他设置到file第六行

如果我让这个程序的话

我看在第六行停了下来

第六行实际是printf

是吧

那如果我是

break第五行

第五行就是printf helloworld

这是设置断点

但是还有还有一些设置条件

还有就是变量跟踪了是吧

我看变量跟踪他这个info locals是当前的变量

就是观察变量的变化状态还可以设置

这就是在运行过程中

我们修改变量的值啊

让他能够正常尝试能够正常执行变量的跟踪

变量的设置backtrace

就回溯缩写

这时我们可以看它的函数的调用关系,好像就是堆栈的状态

你要是这么来理解的话

需要跟踪堆栈

需要跟踪堆栈的状态的话

这地方会稍微深一点

你需要对程序的执行过程有一个初步的了解

也就是函数调用堆栈有一个了解,这个呢

我在我们那个linux内核分析里面专门分析过这一个程序

他一个C代码是怎么样在CPU上执行的

它实际上就是借助于堆栈函数调用堆栈来做的

但我们调试的时候

那我们可以

就是利用bt来看他的就是简单来讲

我们就是可以来看他的函数调用的

这个层次对吧函数调用的关系

比如说在

当前顶层

我们的当前执行的是,对吧

在这个里面

那么他是呢

是在main函数中被调用的

如果我们继续

进入的话是吧

继续进入的话

我们再bt

发现了他有了三层调用关系

也就是说

我们这么一个函数对吧

他是在里面被调用了,他的函数的调用关系

对吧

在某一个上面的我们还可以

用frame命令看他当前的这个

他的就是函数的状态也可以看到

如果我要up

就是他的上一级

互联网体系结构课程列表:

第一周:互联网概述

-课程内容简介

--Video

-网络协议基础

--Video

--Video

--Video

--Video

-上网浏览网页背后的网络通信过程

--Video

--Video

-实验环境安装配置

--Video

-网络相关命令

--Video

--Video

-本周作业

--外部链接

第二周:Socket网络编程

-编译、构建和调试

--Video

--Video

--Video

-Socket接口

--Video

--Video

-UDP范例代码

--Video

-TCP范例代码

--Video

-本周作业

--外部链接

第三周:TCP协议与Linux内核

-TCP协议概述

--Video

--Video

-Linux网络协议栈源代码简介

--Video

-Linux系统的编译、构建和调试

--Video

--Video

-TCP协议源代码分析

--Video

-本周作业

--外部链接

第四周:IP协议及路由表

-IP协议基础

--Video

-路由表

--Video

-路由转发举例

--Video

-IP协议栈源代码解析

--Video

-路由协议简介

--Video

-网络层数据传输路径解析

--Video

-本周作业

--外部链接

第五周:ARP协议及ARP缓存

-ARP协议基础

--Video

-ARP解析的过程

--Video

-ARP解析在网络传输过程中的作用

--Video

-ARP协议栈源代码解析

--Video

-本周作业

--外部链接

第六周:二层交换网络及转发过滤数据库

-以太网基础

--Video

--Video

-交换机的学习、转发和过滤数据库

--Video

-常见二层协议

--Video

-数据链路层在Linux网络协议栈中的一些关键代码分析

--Video

-本周作业

--外部链接

第七周:DNS协议及域名存储与解析

-DNS协议基础

--Video

-DNS域名的存储

--Video

-DNS域名解析过程分析

--Video

-本周作业

--外部链接

第八周:互联网架构设计背后的渊源

-互联网架构设计的最初动机与核心目标

--Video

-互联网架构设计的具体目标及背后重要权衡

--Video

--Video

--Video

-课程考核

--外部链接

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。