【系列二:DevKit编译调试工具】第三讲:《sudoku》项目大作业解析【玩转华为云】
《sudoku》项目大作业解析
在做这个大作业之前,我们需要做一些准备的工作。第一点就是准备好本地的环境和远程的服务器。本地环境可以选取大家比较熟悉的 Windows 环境,也可以,如果大家使用的 Mac 电脑的话,也可以使用 Mac 本。然后远程服务器这边推介大家去到我们的海空恒这边来开发者下面去申请远程服务器。那里面大家只需要填好自己的邮箱,然后就选好操作系统,然后就可以邀请到我们的一个免费的通服务器。
第二点就是准备好本地的一个 IDE 环境,这里我们用的是 VSCode 然后在 vs code 上我们去装一些插件,一个是 C 和 C 加加的一个插件。第二个是我们的控力调试插件准备工作。第三点就是说我们对远程服务器上要去安装我们的 CMake 然后它的一个版本是要求到 3.12 及以上。
第四点就是我们今天的所讲的一个项目,就是从 github 上面去下载的这一个 C 加加的一个速度游戏的源码。好,接下来我通过本地实操给大家演示一下这些准备工作的实操。
那么我们先退出我们的 PPT 然后第一步就是我们去申请我们的远程服务器,然后来到坤的网站海坤文网站大家进来之后往下翻后到这个远程实验室这边,然后去点击立即申请。这里面会让大家去填入自己的邮箱,然后去学,操作系统推荐大家去用欧朋欧拉,然后申请的额度可以学的时长一点,然后这个时间如果不够用的话,后续也可以做一个续时使用。这里面不要忘记勾上。
我已经同意隐私声明,在这之后大家都把 B 选项填完之后,点击提交申请,就会跳转到这个用来到申请成功的一个界面。这个是我以前申请一点时间,然后我就可以看到。然后同时在大家自己刚刚填的邮箱里会收到一封邮件,这个就是我们第一步远程实验室申请的步骤。
那么第二个我们去准备我们的 IDE 的环境,这里面是在我的本地去打开 vs code 上需要我们安装两款插件,第一个是 C 和 C 加加,第二个是控 B 调试,我们进入到 S code ID 这边的插件市场里去点去搜索控棚,点这里面就会搜索出我们共同推出的全部的插件,然后我们这里面去选择空鹏空拍了,然后去自己安装。然后大家发现就是我们在 ID 的左侧这边有一个编译调试插件的图标,或者安装提示已经消失的时候,说明我们并已调试插件已经装好了。然后还有一个是我们去装 C 和 C 加加的茶叶,因为这个我已经提前装了,所以说这块就不去做一个演示了。一个是我们在 ID 上去做的一些准备工作。
到此我们就 ID 这边也准备好了,然后回到第三点就是我们去远程服务器安装 CMake 3.12 以上的版本。就是大家在申请远程服务器成功的时候,他会给发的邮件里面有我们的区域连接远程服务器需要连接的 VPN 然后才可以去登录上去。这里有一天的话,我这边也下载下来了,通过研究一天。后,我进入到。
如果大家第一次去连的话,这边一定去选择新建连接。新建连接的时候大家注意,就是这个端口级别在收到的邮件里面基本上是10,001,一定要注意这一点,一定是远程的网关都是这边收到的是大家看那个 VPN 网关幺二三点六零点幺幺四六零,然后端口是10,001,考虑建平城就叫 remote 远程实验室的一个VPN 。这个好了,业绩,那我们去点击连接。好,这边取叠取消用户名也在我们的邮件里面 BC 压线80,然后再是零八七七密码的话是。
里面推荐大家去做一个记录密码和自动登录的过程,这样的话就不需要我们一次去做输入密码这么一个动作了。另外我可以继续忽略它。好,这边在右下角会提示让他去连接成功这么一个提示,这样的话我们就可以去登录到与城市服务器上。那么登录的工具推荐大家去都可以,其实叉 shell 也可以。然后我们去用 MOBA 也可以,这里面我们就用 MOBA 去登录就好了。建立一个 SSH 连接。这里面大家去输入的这个 SSH 连接,就去选用我们的搜到邮件给的那个弹性器 IP 我这里面这个弹性服务器 AB 是由其二。
后给的用户下发的是root。 port 一直是2,这个没有发生变化点。
好我们等了一段时间看网速,然后如果快的话就立马会让我们去输这个刚刚我输入的弹性 IP 的一个密码,我们再输入 SSH 的密码。
好,输入成功后敲入回车这里面我们就登录上来了,去把这些名字信息清理掉。这里面我们现在已经登录我们的远程服务器,我们去看一下 CMake 有没有大家去用 CMake 杠杠 version 这个名。大家可以看到提示就是说 command not found 就是说我们在新申请的一套服务器,其实它没有去装 MIC 那么我们去安装 yum install 这个去安装我们的 CMake 那里面去输入yes。
是 3.12 的,所以说这个版本是啊适合我们的,到这一步为止,其实我们服务器器上需要做的准备工作也做好了。嗯还有一步,最后一步就是我们去从 github 网址上面去把我们的这个源码下载下来,去直接访问这个地址。这个我就不用重新再输一遍了。就这个地址我们可以去使用 it 克隆也好,然后我们也可以直接从这没有我们不去推代码,然后直接去用这个下载下来就可以了。
方便性的拷贝到一个。
然后解压之后用 ID 把它打开。
好的支持,我们的所有的准备工作均已完成。
我们用 ID 然后把刚刚我们下的从 github 上面下的这个源码把它打开,我简单的浏览一下或者是去阅读看一下这个代码它是怎么去写的,然后以及它的代码结构是怎么样的。这里面就是一般一个好的 get up 像我们正常来说去来之后我们会去读一下他的 read me 这个是对比较好的一个习惯,我们去从这里面去了解我们这个工程。
首先它是个什么功能,或者说的功能是什么这个我们比较清楚,就是在我们一开始上课的时候就说了他是一个用 C 加语言写的一个跨平台的数独游戏,就是大家应该都去玩过一个数独,小时候比如说小学初中有可能都知道或者没玩过,也听过行列总共是 9 乘 9 的一个方格。然后每行每列都是从 1 到 99 数字,然后还有一个九宫格,还有 9 个九宫格这一格,然后有个九宫格也是 1 到 9 就这么简单的一个小游戏,这里面还依赖了解了它的依赖,就比如说我们的 CMake 要求 3.12 的 CMake 版本,这个也就是我们在准备环境之前需要装的 CMake 版本。
接下来就是如何去构建我们这个工程,告诉你如何去构建。这里他做的比较好一点,就是说他把我们的构建命令就是编译命令整体上去写到了一个脚本里面,而不是说去到时候让我们构建数据大篇命令,这个也是比较好的一点做的。 Windows 下面它我们用的是 bat 文件。这种 mark Linux 下面用的是一个 builder sx 文件。当然我们去执行这种在 Windows 在 Linux 和 Mac Mac 下面去执行这种。在此文件一定去给他一个可执行捷径,这个 change mode 就是去给它去加了一个图片。
最后就是我们构建成功之后,然后变成一个二进制,把我们的源码打包成一个二进制。然后我们怎么去做运行是吧?去运行里面也给了两种运行的方式,一个就是直接启动。第二个就是去读游戏进度文件去启动。再往下就是我们去如何去玩这个游戏了就是 wasd 的一些操作,30左右男孩尝试通过自己退出。
最后一点比较重要,就是这个项目的一个结构,就是文件是怎么去布置的,工程是怎么样的。这里面也给这几个也是以脚本构建。这个是 symic list symake list 大家应该,比较清楚。在我们 Linux 和 UNIX 环境下开发 C 或 C 加程序,我们经常去写的一个编译的一个文件行。最后一个是源代码的一个目录,这里面它分了几块,就是一个是几个类。我这里面先不带大家去细看了,大家了解一下大概看一下,一个是头文件,一个是实现,然后整体上有块命令这些还有一个 driver 就是或者是叫入口的一个文件。 MI MI 文件以后是比较好的一个工程或者项目的话都会开发者一定会写 UT 去写一些测试用例的测试文件,这里面也都在这里了。
后面说一嘴就是个人感觉这一个可能弹幕比较小无所谓,就是我们原文件下面正常来说头文件会放到一个 include 文件里的功能文件,当然你的头文件如果比较多的话,也会再问文件夹功能环节放到一个文件夹里,再细分。我的测试 UT 也会单独形成一个文件去写我们的测试。这里面的作者可能是考虑到弹幕比较小,没有去做细分。不过就是我们正常去写代码,也好,后续去做我们的需求也好,推荐大家去划分一个比较好的一个。
看完这个 read me 之后,也简单地跟大家聊聊我们去做工去如何划分我们的代码结构以及文件夹的划分。看一下我们对于 C 和 C 加加程序里比较重要的一个文件。这里面就会写我们配置要求还有如何去整个 project 它是如何项目结构是如何就是相互关联的,先编译哪一块,再后编译哪一块编译也是这个样子。那我们简单看一下,首先他会做我们 3.12 最低版本的,去要求我们的工作名叫什么,就是以后再去添加一些我们编译使用的选项。那这些东西写上去演绎,最后去做一些的编译出来的二进制的名字叫什么?
大家可以看到我们刚刚的是执行的远程编译的那个脚本里面,它有创建一个 build 文件夹对吧,记不记得这块,然后有个野生文件夹,然后逛街之后执行的编译。最后的编译成功的东西,它在病里面,所以我们直接切到病里面,我是不是有速度这个东西。好,接下来我们去先看一下他这个速度,一个项目大家拿到手。比如说编辑成功之后,我们肯定是就去就是简单地运行一下,看看它到底是个什么东西对吧,然后怎么去操作。刚刚我们也看到 admin 了,所以这块我们先看。切到我们的病,然后再运行有点高,可以看到现在进到了代码实际运行,代码实际运行。我们学个简单一点的。这边就是我们生成的速度网格或者速度棋盘,可以看到简单的话确实少一些网格。然后就可以无聊的时候大家可以去玩一玩这个东西。按其他的东西了,然后我们用 wasd 去移动这些网格,是这个每一行每一列,然后九宫格一刀九都可以去填帮我们移动光标。看一下这一行填 1 到 9 我们缺1。
首先因为大家看我这个光标刚刚给大家看了一下,有成编译之后生成二进制,我们在远端这边运行了一下那个二进制,现在我们回到 ID 这边,然后去做一个远程调试的演示。这里面主要是去看一下我们一个测试代码的一个演唱调试。那么我需要在代码从这个 test 改为1,让他这个我这样子的话我就需要添加我们的测试用例。好这个测试用例,这样我们刚刚重新保存了代码之后,我们需要重新执行编译。
那么我先只存编译,然后并把代码上传。在这里其实被一条插件,它提供了一个叫自动上传的和手动上传的功能,我们可以在这里面去配置把自动上传的功能给它配置好,修改配置目标服务器,它选到 R 这样的话也保存配置,这样的话它会监测到比如说我这个 main CPP 1,比如说我这边代码一改,它就会自动往代码服务器上。不比如说我这边还在改回1,原来可以看到代码就自动已经同步到一层补气了。
这样我们再去编译的时候,比如我们刚刚在去执行我们这个速度 build 的时候,它就我们就不需要去这个之后我们不需要叫同步并编译了,这样的话它就已经同步好了,仅编译就好,这是我们的。编译的重新代码同步之后编译的一个结果。然后我们在这个目录下是有。
在这里吗?我们去看一下帮我的编译测试用例任务。你好,就叫。
然后程序的路径我们也查一下,也输入pwd。
与粘贴,那我们就把它添加好。这边已经添加成功了。添加成功之后,我们刚刚看一下我们的刚刚改的这个代码是干什么的。就是如果我这个 test 变为 1 了,那么我们正常的它就会走 24 和 25 行这样分支。那我们 24 就是其实生成一个棋盘的测试函数,这里面大家可以看到就是棋盘生成的一个函数。我们到测试用例。
这边首先获取一下我们的测试用例。
我等了一会,发现那个自身用力出不来了,为什么出不来呢?我们回来看一下这块代码,发现这边其实在我们生成起盘之后,这边其实程序一直在等我们键盘的一个输入,但是因为我们这边的通道是没法去模拟,那边就是 Linux 那边端去接盘输入的,所以说这块测试用例就出不来了。那么我们是详如果是只测试我们的这个棋盘的一个生成情况,其实我们来做一件事情,就是把我们的就是这样重新去上传我们的代码 S 之后,我们刚刚配置了自动同步,它也同步过去了。同步完成之后,我们需要回到每条插件之前,重新执行我们的运营任务。
因为编译成功了,然后我们再重新把我们的。
盈利加回来。
好添加成功,这次我们再一次去获取。来看,现在的话就测试用例可以获取了,然后我们运行在远端进行一个运行,好这边就是运行的一个结果。那么我们如果说想要去做一个测试代码的调试,那我们需要在我们的每行然后试一下。因为其实正常来说测试代码跟业务代码不放到一块,还是用几 Google test 一个比较好的一个测试框架去写我们的 UG 的,但是这个 demo 它写得比较简单,所以说我们还正常利用这个去做调试。
好,这边进来了,直接进到这个 test case 1,我们步入进到这里面去看一下,可以看到这里面都会又回到我们正常的一个调试环节而生成这一面,我们也可以步入进去去看一下。好,然后我们直接让她走完。
这样大家可以看到其实在我们的控制台这边调试过程中的输出,就是我们这个期盼是一个完整的棋盘。我这里面大家也可以看到,其实我们调试控制台它也是用 gdv 进行一个调试的,只不过就是中间步骤它这边也会做一个展示。那么刚刚我们去做了一个简单的就测试用例的调试,那么下面我们再去做最开始的业务代码的一个调试,我们还是回到这里,我们把 S 接着别为0。然后这里面大家注意看一下这个代码就是这里面也是去输入 if code 然后去生成可以看一下这里面它其实也是在输入 DEV code 它也有一个就是读取键盘的一个操作这个。然后这里面它会有一个依据,我们如果是 easy 它就会挖取 20 个空格,困难的话挖取 50 个空格这样的一个例子。
那么如果我们方便调试的话,这个代码它写成这样,我们这里面就不要去用输入直接这行代码。就直接用它定义为20,然后去做这种调试。那么 play 它其实也是一个show。然后监测我们的输入。所以说这个 play 我们也先不需要去做这样的调试,我们回到那主函数,然后把这个杯这样的话我们刚刚修改了代码,使用 control S 进行保存。
我们把。我把代码拷出来,拷不到。
然后我们去打一个断点。这里好代码,我们通过到服务器重新去编译,也去做编译。
重新去做调试,调试动作。这样的话他就会进到我们的。
业务代码里面,业务代码里面我们去做一个调试,进入步入,因为你这个步入其实在这里面会进到我们的CS。 Csthink. 之后我们走 next 这里面就是一个棋盘完全生成的过程,我们可以进来。进来之后它大家会看到这个随机的一个映射,再往后这个我也不去做也是了,大家去做一个自己的调试,然后我们再回到多少数。当然这里面是一些堆栈信息,我们的变量取值说对战,然后端底回到最外面这一层最外面这一层这个端底,然后执行到一插手这块进去。
一期的做完。
这样的话,一个调试过程正常,那个正常来说他就走完了。所以说调试过程有可能大家会遇到各种各样的问题,没有一个统一比较好的一个。那种定论去我们去做操作。然后最开始肯定是要找到我们的函数的入口,入口处,可以学得一半一半的去调试。二分法类似的那种方式去调,比方到中间,看看你的数据组是不是符合你预期的。整体上我们毕业调试插件的功能有远程编译和远程调试。大概就这么多,然后这一个速度的小例子。然后对调试来说并不是特别的去那么友好。然后我们今天因为我们现在拿到的这个 github 代码,它是最后的一个成型过,成型后的一个代码,真实的去写代码的场景,肯定是在这种一参数类型下把代码去调好也好,用特殊用例调好,在 3 的这种类型也去调好。然后。
把这两种场景全部调好之后,再去把条件拆解来去。这样的话你的两个只调好调黑。关于编译调试原生的编译和调试功能。
我跟大家就简单的先说到这里,下去有兴趣可以去把我们的比如说幂函数,我们的数独的一些小操作,比如说 wsd 不符合你的那个就是按键的习惯,我们可以改成那个上下左右这种箭头。那么怎么去改呢?当然去干嘛去搜索它哪个地方。通过 W 这里面大家可以去使用是 S code 这里面一个再搜索。这样的话我们就可以看到 read meins.app 里面。
我们通过这节课从一开始的环境准备,然后到环境准备的一些实操,然后再到一些从 github 上面把源码下来。如何去对一个 github 上面的一个工程进行一个文件顺序的读取,去了解这个工程结构。还有说去对一个比较好的一个工程结构代码结构的划分。我们的正常来说是用 include 去装我们的头文件,然后 hrc 去放我们的其他文件。还有一些 test 正常来说我们有专门的文件夹去放我们的测试用例 UT 以及我们正常去写一个比较好的工程。
- 点赞
- 收藏
- 关注作者
评论(0)