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,则必须手动完成翻译工作。
- 预处理: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 就会运行该程序
得到
- 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
这里,如果testsize100就在46行处断点。
*指定程序直到退出当前循环体:
(gdb) until
或(gdb) u
这里,发现需要把光标停止在循环的头部,然后输入u这样就自动执行全部的循环了。
*跳转执行程序到第5行:
(gdb) jump 5
这里,可以简写为"j 5"需要注意的是,跳转到第5行执行完毕之后,如果后面没有断点则继续执行,而并不是停在那里了。
另外,跳转不会改变当前的堆栈内容,所以跳到别的函数中就会有奇怪的现象,因此最好跳转在一个函数内部进行,跳转的参数也可以是程序代码行的地址,函数名等等类似list。
具体实施情况如下
- makefile
Makefile带来的好处就是“自动化编译”。因为一但写好,只需要 make 命令,整个工程可以完全的编译,极大提高软件的开发效率。
make工具最主要也是最基本的功能是由makefile文件中描述的源程序至今的相互关系完成自动编译、维护多个源文件的工程。而makefile文件需按照某种语法来编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。
Makefile 基本规则
-
打开的gvim环境中输入i进入编辑模式,输入代码,保存为prog.c、 code.c、 code.h文件
-
输入vim Makefile,输入i进入编辑模式,输入代码并保存
-
输入make,进行自动化编译
-
执行./test查看结果
教材学习中的问题和解决过程
- 问题1:在windows系统下运行gcc无法使用。
- 问题1解决方案:在实验楼中进行学习。
代码调试中的问题和解决过程
- 问题1:虚拟机中git的使用有些遗忘,这次先用idea进行git。
- 问题1解决方案:下一周会在虚拟机中进行git。
代码托管
其他(感悟、思考等,可选)
本周主要的学习内容就是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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)