开发工具

1.vim 的简单配置    https://blog.csdn.net/wooin/article/details/1858917

2.几种编辑器的对比

vim和Emacs的对比https://blog.csdn.net/yummy_alice/article/details/79492785

vim是一个强大的编辑器

        Vim不只是Vi

        Vim是Vi最受欢迎的变种之一,除了继承了Vi迅捷的编辑方式, Vim的功能已经比原始的Vi强大得多。这也得益于它可以用Vim脚本无限地扩展。 Vim.org 上已经有数千个脚本了,给Vim增加各种各样的特性和功能。

        为了证明Vim的可扩展性不输于Emacs,也有用户写了在Vim中玩游戏、运行Shell、和集成GDB在Vim内部调试的插件。客观地讲,Vim的脚本语言与Emacs的ELisp相比,略显逊色,但这丝毫不妨碍它把Vim扩展成非常优秀的编辑器。

        说到底,Vim的前身Vi和Emacs的设计采用了不同的哲学, Vi更符合Unix传统,它通过管道机制和系统内各种积木工具打交道,它讲究的是和系统内的工具程序协作来完成用户的任务。和Emacs相比,它的定位很明确,就是要做一个强大的编辑器。因此Vim的绝大部分扩展,都是为了更好地完成编辑文本的任务。

 Emacs是一种伪装成编辑器的操作系统

   有句夸张的话说:Emacs是伪装成编辑器的操作系统。细细想来,这句话并不夸张。

        Emacs其实是个Lisp的解释器,因此可以用Lisp灵活地扩展。 Lisp是什么东西,这同样是种很有生命力的编程语言。在C语言还没有发明的年代,MIT的人工智能实验室写ITS操作系统时,一部分用的是汇编语言,还有一部分就是用的Lisp。现在,Lisp仍在人工智能研究领域广泛使用着。

        有这么牛逼的扩展语言,注定Emacs向着无所不能的方向发展。渐渐地,人们用Emacs不再限于写程序,写文档,而且在Emacs里管理文件系统,运行终端,收邮件,上网,听音乐……,真是一发不可收拾。甚至,有人用Emacs控制咖啡机煮咖啡。

 

 Emacs是神的编辑器,而Vim是编辑器之神。

在linux下,除了vim编辑器还有Emacs,TextMate

  • Emacs是文本编辑器,也是宏编译器
  • TestMate是mac下的一个编辑器

vim与Emacs的区别

  • vim有其老头子vi和兄弟Nvi,Vile,Elvis等

  • vim主要设计用来写程序的,当然也可操作众多的文本文件;Emacs主要设计用来文本操作的

  • vim体积小启动快;相反,Emacs体积大,启动慢

  • VIM专注于文本编辑;而Emacs功能强大:除了VIM常干的事外,还有排版,收发邮件,IDE,播放MP3,日程安排,系统管理,浏览网页,甚至教你做一道精美的川菜….,功能强大到BT的地步.故若说VIM是一种工具的话,则Emacs则可认为是一种”生活平台”

  • VIM学习曲线陡峭而较短;Emacs 学习曲线平缓而较长

  • VIM是有模式的编辑器;而Emacs是没有模式的(现在的很多编辑器和word处理器都是无模式的)

多种编辑器的对比https://blog.csdn.net/u011596455/article/details/53239635

1、Eclipse

Eclipse是一款很酷的开源代码编辑器,同时它也是最受程序员亲睐的代码编辑器之一,它拥有代码高亮和智能提示等强大的功能。在Eclipse中,你可以完全胜任以下编程语言的工作—&mdashython, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等,它也是非常著名的Java集成开发环境,甚至提供了对Java 8的支持。在一些Web开发IDE特性的帮助下,你可以非常方便地对代码文件进行组织和访问。

官方网站: https://www.eclipse.org/  

2、Light Table

Light Table将会是一款彻底改变Linux编辑器概念的代码编辑器,它提供了直观和易用的编程界面。并且Light Table可以很方便地进行定制功能,因为它也是开源的。它有一个强大的插件管理器,这样你就不用在网上漫无目的的寻找需要的插件了。

官方网站: http://www.lighttable.com/

3、Sublime Text 3

这是一款绝对值得一提的Linux代码编辑器,因为它有简单而且超酷的功能特性。Sublime Text 3最独特的地方就是它没有独特的功能,它仅仅是一个简单的代码编辑器,有了它,你就可以非常方便地对多行代码进行修改了。利用Sublime Text 3你可以做操作文件、重命名变量、分离编辑和其他有趣的操作。

官方网站: http://www.sublimetext.com/3

4、Brackets

Brackets也是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,当然你也可以在扩展中心获取更多的主题。

官方网站: http://brackets.io/

5、Dart Editor

Dart Editor是Google开发设计的,旨在帮助开发者制作光亮而惊叹的Web应用。Dart Editor支持多种开发语言,同时也集成了Dartium。通过它的静态分析引擎,你可以创建,维护,调试和开发自己的Web应用。函数、类、方法等都能以树的结构列出来,方便你编写代码。

官方网站: https://www.dartlang.org/tools/editor/ 

---------------------本文来自HuFeiHu-Blog的CSDN博客,全文地址请点击:https://blog.csdn.net/u011596455/article/details/53239635?utm_source=copy

3.几种编译器的对比

gcc/g++

开源的,Linux/Unix平台上的首选,而且支持N中硬件平台,如果想进行跨平台编译的话,这是一个不错的选择。编译效率和编译后的代码效率都不错

VisualC++

Windows平台上最流行的编译器,和VS集成的很好,编译效率和编译后的代码效率都不错

VS系列

微软的Visual Studio,目前最全面和功能强大的主流IDE环境

4.gdb调试时的-g选项

现代的开发系统都具有强大的调试工具,它们成为程序开发者跟踪程序执行过程、解决程序潜在问题的利器,使用 GCC 开发程序也不例外,与之配套的调试工具便是 gdb ,简称至 GUN Debugger,我们常用它来调试 GCC 编译生成的可执行文件。

默认编译生成的可执行文件是无法使用 gdb 来跟踪或调试的,因为可执行程序中没有可供 gdb 调试使用的特殊信息,为了将必要的调试信息整合到可执行文件中,我们便需要用到 -g 选项,这样生成的可执行程序,倘若出现问题,便可以使用 gdb 找出问题具体出现的位置,便于问题的解决。

下面我们就来制造一个“问题”程序,演示一下 -g 选项的使用,同时也体验一下 gdb 的调试功能。

#include <stdio.h>
int main(void)
{
    int num = 365;
    printf("%s days a year\n", num);
    return 0;
}

仔细观察以后发现,上面代码中的“问题”出在 printf 函数上,int 类型的整数应该使用 %d 打印,使用 %s 的话,就变成打印地址为 365 的内存区域了。

如下图所示,在编译该程序时,警告提示 year.c 第 6 行个格式不匹配,我们忽略它,是为了故意制造一个“问题”程序。执行该“问题”程序时,出现段错误,为了记录错误出现的具体位置,我们需要对 core 文件进行相关配置。

那么什么是 core 文件呢?其实,当 Shell 中运行的程序因为错误而崩溃时,系统会自动生成一个文件用于记录崩溃时刻的系统信息,包括内存和寄存器信息,可供程序开发者日后排查问题时使用,这个文件就是 core 文件。一般而言,core 文件存放在当前目录,不论崩溃的程序编译时是否加了 -g 选项,都可以使用“gdb 程序名 core文件”命令来查看程序崩溃时的相关信息,只是编译时加了 -g 选项的程序崩溃后可以使用 gdb 通过 core 文件跟踪到程序崩溃的具体文件、函数以及行数,而未加 -g 选项的程序崩溃后则只能通过 core 文件跟踪到崩溃的具体函数而已。

进入 Shell 以后,core 文件的大小默认设置为 0,这样程序在崩溃以后系统就不会帮我们记录 core 文件了,为了能够调试,我们使用命令“ulimit -c unlimited”将 core 文件大小设置为 unlimited (无限大),当然也可以使用数字来代替 unlimited,对 core 文件的上限大小做更精确的设定。

trevor@trevor-PC:~/linux/linux100$ ls
09 year.c
trevor@trevor-PC:~/linux/linux100$ gcc -g year.c
year.c: In function ‘main’:
year.c:6: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
trevor@trevor-PC:~/linux/linux100$ ls
09 a.out year.c
trevor@trevor-PC:~/linux/linux100$ ./a.out
段错误
trevor@trevor-PC:~/linux/linux100$ ls
09 a.out year.c
trevor@trevor-PC:~/linux/linux100$ ulimit -c unlimited
trevor@trevor-PC:~/linux/linux100$ ./a.out
段错误 (核心已转储)
trevor@trevor-PC:~/linux/linux100$ ls
09 a.out core year.c
trevor@trevor-PC:~/linux/linux100$ gdb a.out core
GNU gdb (GDB) 7.2-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/trevor/linux/linux100/a.out...done.
[New Thread 6006]
warning: Can't read pathname for load map: 输入/输出错误.
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x00a53b33 in vfprintf () from /lib/libc.so.6
(gdb) bt
#0 0x00a53b33 in vfprintf () from /lib/libc.so.6
#1 0x00a5aad0 in printf () from /lib/libc.so.6
#2 0x080483ea in main () at year.c:6
(gdb) quit
trevor@trevor-PC:~/linux/linux100$

如上图所示,执行了“ulimit -c unlimited”命令以后,程序再次崩溃时,提示“核心已转储”,即生成了 core 文件,执行“gdb 程序名 core文件”命令来查看程序崩溃时的相关信息,这时的 gdb 告诉我们程序最终崩溃在 vfprintf 函数,在 gdb 内再执行 bt 命令,用于查看堆栈信息,这下就一目了然了,分析得知程序由 year.c 的第 6 行进入 printf 函数,最终崩溃在 vfprintf 函数,这时我们便可以回到源代码 year.c 的第 6 行分析 printf 函数是否存在问题,这样就能很容易地发现 printf 函数中参数格式不匹配的问题。

---------------------本文来自 芮小谭 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tanrui519521/article/details/79866674?utm_source=copy

readelf命令:http://man.linuxde.net/readelf

[功能] 

用于显示elf格式文件的信息。 

[描述] 

readelf用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。 

这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。 

运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。 

ELF文件类型: 

种类型的ELF文件: 

a)可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。 

b)可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。 

c)共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。 

ELF文件作用: 

ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件: 

a)如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。 

b)如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。 

c)如果是共享文件,则两者都含有。 

ELF文件总体组成: 

elf文件头描述elf文件的总体信息。包括: 

系统相关,类型相关,加载相关,链接相关。 

系统相关表示:elf文件标识的魔术数,以及硬件和平台等相关信息,增加了elf文件的移植性,使交叉编译成为可能。 

类型相关就是前面说的那个类型。 

加载相关:包括程序头表相关信息。 

链接相关:节头表相关信息。 

一些命令参数

-a 

--all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. 

-h 

--file-header 显示elf文件开始的文件头信息. 

-l 

--program-headers  

--segments 显示程序头(段头)信息(如果有的话)。 

-S 

--section-headers  

--sections 显示节头信息(如果有的话)。 

-g 

--section-groups 显示节组信息(如果有的话)。 

-t 

--section-details 显示节的详细信息(-S的)。 

-s 

--syms        

--symbols 显示符号表段中的项(如果有的话)。 

-e

--headers 显示全部头信息,等价于: -h -l -S 

-n 

--notes 显示note段(内核注释)的信息。 

-r 

--relocs 显示可重定位段的信息。 

-u 

--unwind 显示unwind段信息。当前只支持IA64 ELF的unwind段信息。 

-d 

--dynamic 显示动态段的信息。 

-V 

--version-info 显示版本段的信息。 

-A 

--arch-specific 显示CPU构架信息。 

-D 

--use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。 

-x <number or name> 

--hex-dump=<number or name> 以16进制方式显示指定段内内容。number指定段表中段的索引,或字符串指定文件中的段名。 

-w[liaprmfFsoR] or 

--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 

显示调试段中指定的内容。 

-I 

--histogram 显示符号的时候,显示bucket list长度的柱状图。 

-v 

--version 显示readelf的版本信息。 

-H 

--help 显示readelf所支持的命令行选项。 

-W 

--wide 宽行输出。 

--------------------- 本文来自 lijun5635 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/lijun5635/article/details/8876040?utm_source=copy

5.进度条

/*j.c*/

 #include <unistd.h>                                                         
 #include <stdio.h>
 int main()
 {
      char buf[102]={0};
      char* lab="|/-\\";
      int i=0;
      while(i<=100){
          printf("\033[0;32;31m[%-100s] \033[0;32;34m[%d%%] \033[0;32;32m[%c]\    r",buf,i,lab[i%4]);    //red,blue,green
          buf[i++]='#';
          fflush(stdout);
          usleep(100000);
      }
      printf("\n\033[0;32;31m Complete! \033[0m\n");
      return 0;
 }

/*Makefile*/

j:j.c

     gcc  j.c  -o  j

.PHONY:clean

clean:

    rm  -f  j

6.Linux下的几种软件安装方法:详解

(1)源码安装

几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc、make、automake、autoconf都支持源码安装。

①源码安装的方式

1、cd 源码所在目录
2、./configure [opts]
3、make
4、make install

②源码安装优点

源码安装的优点有以下几点

  • 文档齐全
  • 因为可以定位到代码,所以debug方便
  • 本机兼容性最好(由于是本机编译的,只要编译通过,就没有各种库的依赖的问题)

③源码安装的缺点

  • 编译麻烦
  • 缺乏自动依赖管理,软件升级麻烦

(2)rpm包安装

rpm包安装几乎在所有Linux平台上都支持,它就像Windows下的exe安装文件一样,各种文件已经编译好,并打包,哪个文件在哪个文件夹里面都已经被指定好,所以很方便。

①rpm包安装的方式

由于安装的方式非常简单,我们只需要输入一条指令即可。

rpm -i xxx.rmp

通过上面的命令我们便可以完成rpm包的安装。

②rpm包卸载的方式

rmp包卸载的方法也很简单,只需要如下命令:

rpm -e 包名

③rpm包升级的方式

升级需要如下命令:

rpm -U 包名

我们需要注意的是此时计算机需要联网。

(三)yum安装软件包

yum并不是一种包,它是安装包的一个软件,在CentOS中是软件包的管理器,yum也对依赖关系进行管理,但是必须要在联网的情况下完成。

①yum包安装的方式

yum -y install

②yum包卸载的方式

yum remove 包名

三、安装完成后执行的方法

  1. 有些软件安装后会自动在应用程序列表里加上快捷键,和windows一样,到那里找就行了。

  2. 如果在应用程序列表里找不到的话,可以直接在 / 开始 / 运行命令里输入命令:启动命令一般就是软件名,如firefox,realplay,xmms等

  3. 也可以打开一个shell终端,输入软件名,和在“运行命令”里一样。如果不知道命令全程的话,可以输入开头的字母,然后按tab键查找,系统会自动显示以输入字母开头的所有命令 /

  4. 你也可以直接到安装目录下运行启动文件,Linux下的可执行图标和shell终端图标很像

  5. 到 / usr / bin目录里找安装的软件启动文件执行命令。Linux系统把所有可执行的文件命令在 / usr / bin目录里都作了启动连接,你可以去那个目录寻找你安装的文件的启动命令,双击启动

--------------------- 本文来自 ArchyLi 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ArchyLi/article/details/78630404?utm_source=copy

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值