1.   Linux开发工具的使用

Vim编译的使用

Ibm的Vim 实用技术

http://www.ibm.com/developerworks/cn/linux/l-tip-vim1/index.html

http://www.ibm.com/developerworks/cn/linux/l-tip-vim2/index.html

http://www.ibm.com/developerworks/cn/linux/l-tip-vim3/index.html

l         跳转命令:

^,$        光标移动至行首、行尾

(,)         一句话的最前面、最后面

{,}        一个段落的最前面、最后面

H          跳到第一行

M          跳到中间一行

L          跳到最后一行

gg         跑到文件开头

G          跑到文件结尾

查找命令

/?查询,  s/查找内容/替换内容

编辑命令

复制:     y复制选择的内容、yy复制一行、nyy复制n行

剪贴       d

粘贴:     p; ]p代码粘贴

删除:     d删除选择的内容、dd删除一行、dw删除一个单词

取消:     u

更改:     cw更改光标所在位置的一个字

删除或称谓剪贴

db 删除到某个单词的开始位置

d) 删除到某个语句的结尾位置

d( 删除到某个语句的开始位置

d} 删除到某个段落的结尾位置

d{ 删除到某个段落的开始位置

D 删除到某一行的结尾=d$

修改

cl 更改当前字符(等于先按x再按i)

cw 修改到某个单词的结尾位置(dw再i)

cb 修改到某个单词的开始位置(db再i)

<<         代码向前移动

>>         代码向后移动

窗口命令

:split/vsplit  分隔一个窗口

:new/vnew      创建一个新的窗口

:sf 文件名     在新窗口中打开filename

:only          关闭除当前窗口外所有窗口

:ctrl-w        可进行切换窗口

:ctrl-w h      到左面的窗口

:ctrl-w l      到右面的窗口

:ctrl-w j      到下面的窗口

:ctrl-w k      到上面的窗口

set paste //在粘贴之前使用该命令, 就不会在粘贴的时候将格式搞乱,粘贴之后再使用set nopaste即可将自动格式命令打开
set complete+=k // 自动完成?
setlocal omnifunc=syntaxcomplete#Complete        //"打开语法打开补全
dw,剪切单词。d$,剪切到行尾。d0,剪切到行首。[n]dd,剪切一行或下面n行。
yw,复制单词。y$,复制到行尾。y0,复制到行首。[n]yy,复制一行或下面n行。
 
 
写代码的时候的快捷键:
    ]p:和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。
    gd:定位到局部变量声明处
    K:在 Man 里面查找光标当前所在处的词,显示光标下的C函数的man说明手册
    ^P/^n 自动完成功能;如果没有合适的就一直按C-P/N
    ^]:显示~/.tags中的光标下的函数的原型,
    ^t:退出函数的原型窗口
 
 
在编译一个文件时候同时打开另外一个文件
:sp                      [filename]
CTRL-W h                 跳转到左边的窗口
CTRL-W j                 跳转到下面的窗口
CTRL-W k                 跳转到上面的窗口
CTRL-W l                 跳转到右边的窗口
 
 
生成C语言标准函数库的tag文件
ctags -R -f ~/.vim/systags --c-kinds=+p --fields=+S /usr/include /usr/local/include 
再在.vimrc加上 ctags+=~/.vim/systags 
这样每次生成ctags只生成本工程下的,但使用时却又能包括标准接口。 
 
$ctags -R *   (将当前目录和子目录中的文件生成tag)
$vi -t find   (在目录中查询find函数)
:ts   find    (查看find函数)
:ta   find    (查看find函数)
 

Gdb调试工具的使用

gdb代码调试参考

http://fanqiang.chinaunix.net/program/other/2005-03-23/2993.shtml
 
1. 设置断点
(gdb)b test.c:17     //表示在17行设置断点
(gdb)b test.c:func  //表示在test.c文件中func函数开始的地方设置断点
(gdb)b test.c:21 if result==20 //断点的触发的条件是result==20
(gdb)info b            //查看断点的信息
(gdb)delete、enable、disable、clear、// 维护断点
 
run[r]//运行
continue[c] //继续运行
next[n]      //下一条语句;不会进出函数内部
step[s]      //会进出调用的函数内部
finish         //退出函数
 
注意:在输入b按两次tab键,会列出所有以b开头的命令
 
 
2. 查看断点变量内容
backtrace[bt]//打印当前的函数调用栈的所有信息
bt n             //是一个正整数,表示只打印栈顶上n层的栈信息
                  //-n表一个负整数,表示只打印栈底下n层的栈信息
frame(f) n    //表示查看当前栈某层信息
info f           //打印出更为详细的当前栈层的信息;
info args      //打印出当前函数的参数名及其值
info locals    //打印出当前函数中所有局部变量及其值
info catch    //打印出当前的函数中的异常处理信息
 
@   //操作数组
(gdb)p/c *array@10   //打印array后面10个字符的内容,按照字符查看
(gdb)p/x *array@10   //按照16进制查看
(gdb)p  this              //查看this的数据
 
::  //指定某文件、类、函数中的变量
(gdb)p "test.c"::m_test      //查看test.c文件中的变量
{}     //一个内存地址为type的对象
 
3.查看源代码
(gdb)l n,fun             //显示程序第n行或某函数周围的代码
(gdb)l CTest::get_count  //查看CTest类中get_count函数
 

Makefile的编写

make的基本介绍[Makefile]

make是一个有规则的文本文件,每个规则由三部分组成:目标、依赖文件、命令列表
target: dep1 dep2 dep3 ...
    command1
    command2
    ......
注意:每个命令前面是制表符不能用空格代替!
 
例如:
ipphone : ipphone.o
    gcc -o ipphone ipphone.o
ipphone.o: ipphone.c ipphone.h
    gcc -c ipphone.c
ctl: ctl.o
    gcc -o ctl ctl.o
ctl.o: ctrl.c ipphone.h
    gcc -c ctl.c
上面有四个规则;如果make命令行中没有包含规则名就会检查所有的规则,如果有则只检查该规则,例如只想生成ctl文件需要make ctl即可!
 

伪目标

例如:all: ctl ipphone //这是因为all并不存在它只是检查ctl和ipphone作用
例如:clean: rm -f *.o //由于没有依赖文件所以缺省不会执行,可通过 make clean执行
 

make定义变量和使用变量

为了make文件的编辑和维护更方便,可在make中定义变量、和shell一样;make文件中的变量内容实际是一个字符串,定义和使用规则同shell差不多。
 
CC=gcc -c  使用的时候和shell类似用括号扩起来前面加$;$(CC) 
变量定义时候引用了自己make会递归展开引发错误:
 
make提供的只读变量:
$@      目标文件名
$<       第一个相关的文件名
$^      相关文件列表、以空格分开
$?       新于目标文件的相关文件列表
$(@D) 目标文件名的目录部分
$(@F) 目标文件名的文件名部分
 

make预定义变量:

AS 汇编器
CC C编译器,缺省cc
CPP C预处理器,缺省值cpp
RM 文件删除程序,缺省rm -f
 
 

隐含规则和规则模式

例如:ipphone : ipphone.o
gcc -o ipphone ipphone.o
该规则没有指出ipphone.o怎么得来,这就适合隐含规则make会自动使用
gcc -c ipphone.c -o ipphone.o命令生成ipphone.o文件。这个规则也可通过%.o : %.c重新定义、表示所有的.o文件都是通过.c文件编译而来;或者通过下面的方式重定义:
%.o : %.c
  $(CC) -c $< -o $@ //表示使用第一个相关的文件名来生成目标文件名
 

make命令行的选项:

-f 指定make文件名不适用缺省值
-n 显示所有要执行的命令,但不执行
-s 执行时不显示命令
-r 禁止make内部规则
-d 显示调试信息
-i 忽略规则的命令错误,继续执行
-k 忽略模块编译错误、继续下面的编译
 
编译的参数
参数信息
-Wall:          输出所有的警告信息。
-O:              在编译时进行优化。
-g:               表示编译debug版本。
 

基本写法 
filestat: filestat.o
    gcc filestat.o -o filestat
filestat.o:
    gcc -c filestat.c
clean:
    rm -fr *.o *~ *.*~ filestat
----------------------------------------------
改善之后的写法
object = filestat.o        // 使用目标文件
cc = gcc                    // 编译器定义
cflags = -Wall -O -g     // 编译条件
 
filestat: $(object)                          // 由.o文件连接成   程序文件
    $(cc) $(object) -o filestat
filestat.o:                                     // 由.c文件编译成   目标文件
    $(cc) $(cflag)  -c filestat.c -o filestat.o
clean:
    rm -fr *.o *.*~ *~ filestat
----------------------------------------------optimization
cc = gcc
cflag = -Wall -O -g
TARGET = ./filestat

OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))  //将当前路径中所有.c文件扩展替换为

            wildcard( %.c); #将目录中所有以.c后缀的文件名,存入一个列表变量中

patsubst( %.c, %.o, listvar);  #表示将listvar中所有以.c为后缀的文件,改为以.o为后缀文件

%.o: %.c
    $(cc) $(cflag) -c $< -o $@            //采用gcc -cflag -c第一个相关联的文件 -o 目标文件
$(TARGET): $(OBJECTS)                 
    $(cc) $(OBJECTS) -o $(TARGET)     //将当前.o文件连接成目标程序文件
    chmod a+x $(TARGET)

subsystem:
    cd subdir && $(MAKE)                   // 进入子目录进行make
clean:
    rm -fr *.o $(TARGET) *~  

======================================================

在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件
建立一个简单的makefile
src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c,%.o,$(dir) )
obj2=$(dir:%.c=%.o)
all:
 @echo $(src)
 @echo $(dir)
 @echo $(obj)
 @echo $(obj2)
 @echo "end"
 
第一行输出:wildcard把指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。
a.c b.c ./sub/sa.c ./sub/sb.c
 
第二行输出:notdir把展开的文件去除掉路径信息
a.c b.c sa.c sb.c
 
第三行输出:patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o,
a.o b.o sa.o sb.o
 
第四行输出:把变量dir中的每一个值结尾用o替换掉c
a.o b.o sa.o sb.o
 
 

linux跟踪调试

-Wall 使用它能够使GCC产生尽可能多的警告信息
 
1、Linux下的大多数函数都默认:
   头文件放到/usr/include/目录下
   而库文件则放到/usr/lib/目录下
   -I 选项:增加头文件目录
   -L 选项:增加库文件目录
 
 
gdb调试程序
 
1.显示数据:print或p 变量print *指针
2.查看数组:人为数组:查看内存中变量h后面的10个整数: print h@10
3.设置断点:b line-or-func if testvalue==100
  显示断点:info b
  删除断点:delete b 1
4.执行:
next:单步执行
setp:进入一个内部函数
finish:跳出该内部函数
list列出下面要执行的源代码
run 开始调试程序
set 变量//给该变量赋值
pype 显示一个数据结构的内容(C的结构或函数)
p/x  i //按16进制显示变量内容,/c按字符/
x/   //examine简拼为x,n是内存的长度,f 表示显示的格式,u 表示从当前地址往后请求的字节数
      x/3uh 0x54320//表示查看0x54320后面3个字节长度按照无符号
 
自动显示:
display
display/
display/
 

SSH的使用

Linux与Linux之间传送文件:
scp LocalFile  username@remoteIP:[path or remoteFile]
scp p2p-tracker root@124.127.108.231:/usr/share/p2p-tracker/
 
 

subversion的使用

安装subversion
sudo apt-get install subversion subversion-tools

1、将文件checkout到本地目录

svn checkout path(path是服务器上的目录)
    例如:svn checkout svn://192.168.1.1/pro/domain     #表示将url中的文件checkout到本地
    简写:svn co

2、往版本库中添加新的文件

  svn add file
   例如:svn add test.php(添加test.php)                   #将test.php添加到svn上面,其路径是当前目录所在svn路径
                                                         #add之后commit才能真正将文件加入到svn上面

3、将改动的文件提交到版本库

svn commit -m "LogMessage" 
例如:svn commit -m "add file" test.php                #只提交test.php文件
例如:svn ci                                           #提交当前目录所有的文件

4、加锁/解锁

  svn lock -m "LockMessage" [--force] PATH
   例如:svn lock -m "lock test file" test.php
        svn unlock PATH

5、更新到某个版本

  svn update -r m path
   例如:
      svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
     svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
     svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
   简写:svn up

6、查看文件或者目录状态

  1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
   【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
  2)svn status -v path(显示文件和子目录状态)
   第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
   注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st

7、删除文件

  svn delete path -m "delete test fle"
   例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
    或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)

8、查看日志

  svn log path
   例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

9、查看文件详细信息

  svn info path
   例如:svn info test.php

10、比较差异

  svn diff path(将修改的文件与基础版本比较)
   例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
   例如:svn diff -r 200:201 test.php
   简写:svn di

11、将两个版本之间的差异合并到当前文件

  svn merge -r m:n path
   例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12、SVN 帮助

  svn help
svn help ci

——————————————————————————

以上是常用命令,下面写几个不经常用的

——————————————————————————

13、版本库下的文件和目录列表

  svn list path
   显示path目录下的所有属于版本库的文件和目录
简写:svn ls

14、创建纳入版本控制下的新目录

svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
         2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
     调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。

15、恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
        被删除的目录

16、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
        2、switch –relocate FROM TO [PATH...]

1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
     服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
     方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动 
    (比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
    这个命令更新工作副本与仓库的对应关系。

17、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
        相关文件,然后让 PATH 可以再次提交。

18、输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

Linux开发工具的使用的更多相关文章

  1. Linux开发工具教程

    今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...

  2. Linux开发工具之Makefile(上)

    二.makefile(上) 01.make工具   利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包 ...

  3. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  4. Linux开发工具之gcc

    一.gcc入门(上)   1.gcc相关概念   gcc(GNU C Compiler)编译器,最初支持C语言,现已支持C.C++.Java.Pascal.Ada.COBOL语言等:支持多种硬件平台: ...

  5. Linux开发工具之gdb(下)

    三.gdb调试(下) 01.查看运行时数据 print - 查看变量值 ptype - 查看类型 print array - 查看数组 print *array@len - 查看动态内存 print ...

  6. Linux开发工具之gdb(上)

    三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能:   启动程序,可以按照用户自定义的要求随心所欲的运行程序:   可让被调试的程序在用户所指定的调试 ...

  7. Linux开发工具之Makefile(下)

    二.Makefile(下) 01.make常用内嵌函数 函数调用   $(function arguments) $(wildcard PATTERN)   当前目录下匹配模式的文件   例如:src ...

  8. Linux开发工具_yum使用

    yum 的说明与使用 1.什么是yum? 软件包管理器 提供了查找.安装.删除某一个.一组甚至全部软件的命令 命令简洁好用 2.yum语法 yum [ 选项 ] [命令] [安装包] 选项: -h h ...

  9. Linux (Ubuntu12.04) 下开发工具安装和使用

    Linux (Ubuntu12.04) 下开发工具安装和使用 这里讲述的是关于在ubuntu12.04下面安装和使用各种IDE 开发环境和初步使用的知识.说一下背景:很多的开发基本都是在linux操作 ...

随机推荐

  1. APP纯黑盒测试---某些可以试试的操作

    一.多次快速点击一处功能入口: 该测试方法可以在某些应用中打开俩次目标界面,举一些具体一点的例子: 1.比如现在很多APP需要登陆,如果打开了俩次登录页面,就容易造成登录成功后应用跳转界面又是登录界面 ...

  2. jquery 让指定导航隐藏

    $(function(){ var aLink=$('.nav-content .nav li a'); // 选中所有a var aText=['星网服务','在线搭配','星网学院','推客联盟' ...

  3. int与Integer

    int 是基本类型,直接存数值 integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者>>integer 是后者(也就是一个 ...

  4. android学习笔记---63-PopupWindow,泡泡窗口的实现

    转载http://blog.csdn.net/lidew521/article/details/8976627 PopupWindow是一个可以显示在当前Activity之上的浮动容器,PopupWi ...

  5. poj 3181 Dollar Dayz (整数划分问题---递归+DP)

    题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ...

  6. Android Studio试用总结

    Android Studio是一年前Google I/O上推出的一款Android开发IDE,他基于JetBrains’ IntelliJ IDEA,目前还在preview阶段.增强了布局拖拽和预览功 ...

  7. 笔记本分享无线Wifi

    两种方法: 一.使用软件分享,如Wifi共享精灵,设置非常简单. 二.开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网,节省网费 ...

  8. DataGrid( 数据表格) 组件[4]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  9. datagrid数据导出到excel文件给客户端下载的几种方法

    方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 优点: 1.可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载. 2.也是因为生成了文件,所以占用 ...

  10. .net打包/c#winfrom程序打包

    1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图) 此主题相关图片如下: 2:安装向导 关闭后打开安 ...