2017-2018-1 学号 《信息安全系统设计基础》第X周学习总结

教材学习内容总结

教材每章的提问

  • 第一章

什么是计算机系统?它包括什么?研究它有什么意义?

  • 第二章

计算机中的数据和平常我们生活中的数据有什么异同?

  • 第三章

为什么要学习汇编?

  • 第四章

ISA是什么?

  • 第五章

如何优化程序性能?

  • 第六章

存储系统层次结构分为什么?

  • 第七章

链接是如何进行的?

  • 第八章

常见异常怎么解决?

  • 第九章

虚拟存储器如何工作?它有什么特性?

  • 第十章

Unix I/O是什么?

  • 第十一章

网络编程步骤?

  • 第十二章

并发编程是什么?

  • vim常用操作

vim可以仅仅在通过键盘在任意模式之下进行切换,这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率。vim有6种基本模式(常用的是普通模式、插入模式和命令行模式):

正常模式:可以使用快捷键命令,或按:输入命令行。

h或退格: 左移一个字符;
l或空格: 右移一个字符;
j: 下移一行;
k: 上移一行;

插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。

i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+就插入了36个+组成的分割线。
I: 在当前行第一个非空字符前插入;
gI: 在当前行第一列插入;
a: 在光标后插入;
A: 在当前行最后插入;

可视模式:正常模式下按v可以进入可视模式,
在可视模式下,移动光标可以选择文本。

按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。

替换模式:正常模式下,按R进入。

几种常用模式的切换:

vim启动进入普通模式;

处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式;

普通模式中按i(插入)或a(附加)键都可以进入插入模式;
普通模式中按:进入命令行模式;

命令行模式中输入wq回车后保存并退出vim。

- gcc编译器

如果是用Code::Blocks等编译软件编译,则在编译完成后自动生成可执行文本;若是用vim,则必须手动完成翻译工作。
image
image

  • 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
  • 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
  • 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
  • 链 接:gcc hello.o –o hello ;gcc -o 调用ld

1。在实验楼中打开的gvim环境中输入i进入编辑模式,输入代码,保存为hello.c文件。

2.在XfceTerminal打开后的界面中输入:gcc hello.c -o hello,编译成功,将会在当前目录生成一个可执行文件 hello

3.继续输入:./hello 就会运行该程序
imageimage
得到

image

- gdb调试程序

使用gdb调试c程序
*执行下一步:
(gdb) next
这样,执行一行代码,如果是函数也会跳过函数。这个命令可以简化为n.

*执行N次下一步:
(gdb) next N

*执行上次执行的命令:
(gdb) [Enter]
这里,直接输入回车就会执行上次的命令了。

*单步进入:
(gdb) step
这样,也会执行一行代码,不过如果遇到函数的话就会进入函数的内部,再一行一行的执行。

*执行完当前函数返回到调用它的函数:
(gdb) finish
这里,运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish.

*继续运行程序直接运行到下一个断点:
(gdb) continue
这里,如果没有断点就一直运行。

*强制调用函数:
(gdb) print
这里,print和call的功能类似,不同的是,如果函数的返回值是void那么call不会打印返回值,但是print还是会打印出函数的返回值并且存放到历史记录中。

*在当前的文件中某一行(假设为6)设定断点:
(gdb) break 6

*设置条件断点:
(gdb) break 46 if testsize100
这里,如果testsize
100就在46行处断点。

*指定程序直到退出当前循环体:
(gdb) until
或(gdb) u
这里,发现需要把光标停止在循环的头部,然后输入u这样就自动执行全部的循环了。

*跳转执行程序到第5行:
(gdb) jump 5
这里,可以简写为"j 5"需要注意的是,跳转到第5行执行完毕之后,如果后面没有断点则继续执行,而并不是停在那里了。
另外,跳转不会改变当前的堆栈内容,所以跳到别的函数中就会有奇怪的现象,因此最好跳转在一个函数内部进行,跳转的参数也可以是程序代码行的地址,函数名等等类似list。

具体实施情况如下

image
image
image
image
image

- makefile

Makefile带来的好处就是“自动化编译”。因为一但写好,只需要 make 命令,整个工程可以完全的编译,极大提高软件的开发效率。
make工具最主要也是最基本的功能是由makefile文件中描述的源程序至今的相互关系完成自动编译、维护多个源文件的工程。而makefile文件需按照某种语法来编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。
Makefile 基本规则

  • 打开的gvim环境中输入i进入编辑模式,输入代码,保存为prog.c、 code.c、 code.h文件

  • 输入vim Makefile,输入i进入编辑模式,输入代码并保存

  • 输入make,进行自动化编译

  • 执行./test查看结果

教材学习中的问题和解决过程

  • 问题1:在windows系统下运行gcc无法使用。

image

  • 问题1解决方案:在实验楼中进行学习。

代码调试中的问题和解决过程

  • 问题1:虚拟机中git的使用有些遗忘,这次先用idea进行git。
  • 问题1解决方案:下一周会在虚拟机中进行git。

代码托管

image

其他(感悟、思考等,可选)

本周主要的学习内容就是vim,gcc,gdb以及makefile。这些对于我们去深入理解C语言的编译过程都有非常大的帮助。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 95/95 1/1 8/8 学习了gcc与gdb的使用

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料