您的位置:首页 > 运维架构 > Linux

5233杨光--Linux第二次实验

2015-09-28 20:28 666 查看
实验说明

1.环境登录

无需密码自动登录,系统用户名shiyanlou,密码shiyanlou若不小心登出后,直接刷新页面即可

2.环境使用

完成实验后可以点击桌面上方的“实验截图”保存并分享实验结果到微博,向好友展示自己的学习进度。实验楼提供后台系统截图,可以真实有效证明您已经完成了实验。实验记录页面可以在“我的主页”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。

3.课程来源

VIM在线手册

内容一:vim编辑器的使用

1.vim编辑器的三种模式

Ⅰ正常模式:(按Esc或Ctrl+[进入)左下角显示文件名或为空
Ⅱ插入模式:(按i键进入)左下角显示--INSERT--
Ⅲ可视模式:左下角显示—VISUAL

2、vim的一些基本操作

Ⅰ、游标移动:

在进入vim后,按下i键进入插入模式。在该模式下您可以输入文本信息,下面请输入如下三行信息:

12345678

abcdefghijk

shiyanlou.com

按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。

按键

说明

h



l

右(小写L)

j



k



w

移动到下一个单词

b

移动到上一个单词

请尝试在普通模式下使用方向键移动光标到shiyanlou这几个字母上面

Ⅱ.插入模式

在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

命令

说明

i

在当前光标处进行编辑

I

在行首插入

A

在行末插入

a

在光标后插入编辑

o

在当前行后插入一个新行

O

在当前行前插入一个新行

cw

替换从光标所在位置后到一个单词结尾的字符

请尝试不同的从普通模式进入插入模式的方法,在最后一行shiyanlou前面加上www.,注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

Ⅲ.保存文档

命令行模式下保存文档:

保存文档从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w文件名可以将文档另存为其他文件名或存到其它路径下

Ⅳ.退出vim

命令行模式下退出vim:

从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑

以下为其它几种退出方式:

命令

说明

:q!

强制退出,不保存

:q

退出

:wq!

强制保存并退出

:w<文件路径>

另存为

:saveas文件路径

另存为

:x

保存并退出

:wq

保存并退出

Ⅴ.普通模式下退出vim

普通模式下输入Shift+zz即可保存退出vim

Ⅵ.删除文本

1.普通模式下删除vim文本信息

进入普通模式,使用下列命令可以进行文本快速删除:

命令

说明

x

删除游标所在的字符

X

删除游标所在前一个字符

Delete

同x

dd

删除整行

dw

删除一个单词(不适用中文)

d$或D

删除至行尾

d^

删除至行首

dG

删除到文档结尾处

d1G

删至文档首部

除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

2dd表示一次删除2行

内容二:Linux下C语言编程基础


实验目的

1.熟悉Linux系统下的开发环境

2.熟悉vi的基本操作

3.熟悉gcc编译器的基本原理

4.熟练使用gcc编译器的常用选项

5.熟练使用gdb调试技术

6.熟悉makefile基本原理及语法规范

7.掌握静态库和动态库的生成

1Linux命令

如果使用GUI,Linux和Windows没有什么区别。Linux学习应用的一个特点是通过命令行进行使用。

登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着
选项
(options)或
参数
(arguments)。即Linux中命令格式为:

command[options][
arguments
]
//中括号代表是可选的,即有些命令不需要选项也不需要参数


选项
是调整命令执行行为的开关,
选项
不同决定了命令的显示结果不同。

参数
是指命令的作用对象。

如ls命令,
ls
ls.
显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略。我们可以用
ls-a.
显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a”就是选项,改变了显示的内容,如下图所示:

GCC的使用

一、GCC编译器

gcc支持编译的一些源文件后缀名

后缀

源文件

.c

C语言源文件

.C.cc.cxx

C++源文件

.m

Object-C源文件

.i

经过预处理后的C源文件

.ii

经过预处理后的C++源文件

.s.S

汇编语言源文件

.h

预处理文件(头文件)

.o

目标文件

.a

存档文件

二、使用GCC的四个步骤

预处理:gcc–Ehello.c–ohello.i;gcc–E调用cpp

编译:gcc–Shello.i–ohello.s;gcc–S调用ccl

汇编:gcc–chello.s–ohello.o;gcc-c调用as

链接:gcchello.o–ohello;gcc-o调用ld三、GCC支持的文件类型

GDB的使用

建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。注意使用GCC编译时要加“-g”参数。参考gdb参考卡GDB最基本的命令有

gdbprogramm(启动GDB)

b设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)

run开始运行程序

bt打印函数调用堆栈

p查看变量值

c从当前断点继续运行到下一个断点

n单步运行

s单步运行

quit退出GDB

问题:GDB的n(next)命令让GDB执行下一行,然后暂停。s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

其他几个我认为应该掌握的调试命令有:

display跟踪变量值的改变

until跳出循环

finish跳出函数

help帮助

gdb常用代码指令

$gdb

这样可以和gdb进行交互了。

*启动gdb,并且分屏显示源代码:

$gdb-tui

这样,使用了'-tui'选项,启动可以直接将屏幕分成两个部分,上面显示源代码,比用list方便多了。这时候使用上下方向键可以查看源代码,想要命令行使用上下键就用[Ctrl]n和[Ctrl]p.

*启动gdb调试指定程序app:

$gdbapp

这样就在启动gdb之后直接载入了app可执行程序,需要注意的是,载入的app程序必须在编译的时候有gdb调试选项,例如'gcc-gappapp.c',注意,如果修改了程序的源代码,但是没有编译,那么在gdb中显示的会是改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱的。

*启动程序之后,再用gdb调试:

$gdb

这里,是程序的可执行文件名,是要调试程序的PID.如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

*启动程序之后,再启动gdb调试:

$gdb

这里,程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID,是要调试程序的PID.这样gdb就附加到程序上了,但是现在还没法查看源代码,用file命令指明可执行文件就可以显示源代码了。

**启动gdb之后的交互命令:

交互命令支持[Tab]补全。

*显示帮助信息:

(gdb)help

*载入指定的程序:

(gdb)fileapp

这样在gdb中载入想要调试的可执行程序app。如果刚开始运行gdb而不是用gdbapp启动的话可以这样载入app程序,当然编译app的时候要加入-g调试选项。

*重新运行调试的程序:

(gdb)run

要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和shell通配符(*、?、[、])在内。

参考资料:一、百度百科

二、vaqeteart的博客—常用gdb代码大全

make工程管理器

makefile是make读入的唯一配置文件

在一个makefile中通常包含如下内容:

需要由make工具创建的目标体(target),通常是目标文件或可执行文件。

要创建的目标体所依赖的文件(dependency_file);

创建每个目标体时需要运行的命令(command),这一行必须以制表符(Tab键)开头。

格式:

target:dependency_files

commandmake的命令行

命令格式

含义

-Cdir

读入指定目录下的makefile

-ffile

读入当前目录下的file文件作为makefile

-i

忽略所有的命令执行错误

-Idir

指定被包含的makefile所有目录

-n

只打印要执行的命令,但不执行这些命令

-p

显示make变量数据库和隐含规则

-s

在执行命令时不显示命令

-w

如果make在执行过程中改变目录,则打印当前目录名

作业

将实验楼中的代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;

编写makefile,让代码编译,上述静态库和共享库的使用自动化

建立函数静态库cal1.a:



将静态库cal1.a链接到main.o中并生成执行文件cal1并执行



建立函数动态库cal2.so



将静态库cal2.a链接到main.o中并生成执行文件cal2并执行



建立静态库的makefile文件



运行make管理器生成cal3执行文件并执行



建立动态库makefile文件



运行make管理器生成cal4执行文件并执行



遇到的问题

设置断点的问题上还不够明白

编译时刚开始总不成功,后来发现是没有head.h,补上后就没问题了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: