linux相关小工具的使用(一)————代码相关工具
在linux环境下,对于程序员来说,知道使用一些好用的小工具,对源代码的阅读、编译和调试都有着事半功倍的效果,这里我也是边学边写的原则,把自己知道的一丁点小知识分享给大家。
一、 源代码的阅读
首先要说一下,源代码的阅读工具,这里我知道的主要有vim和emacs两种,好像据某国外大学调查研究显示:使用vim的普调手比较小,这可能是因为vim的快捷键比较集中在一起,不许要手太大吧,当然这也可能是用emacs的人黑用vim的。由于本人手比较小,所以理所当然的使用了vim。
(一)vim
这个vim在一般的linux发行版里面都是有的,也就不需要安装,但是系统自带的vim是最原始的,还需要对其进行一些改造。
(1)配置.vimrc文件
在linux登录账户的根目录下, 输入命令:vim .vimrc, 然后再加入一些配置的代码,这里我推荐使用的一份:
set nocompatible
"不使用vi默认键盘布局 <----这个很重要,如果不配置,在编辑模式下按方向键会输入字符,很不方便>
set number
"显示行号
set autoindent
"自动对齐
set smartindent
"智能对齐
set showmatch
"括号匹配模式
set ruler
"显示状态行
set incsearch
set shiftwidth=
set softtabstop=
set noexpandtab
set cindent
"C语言格式对齐
set nobackup
"不要备份文件
set clipboard+=unnamed
"与windows共享剪贴板
syntax on
"支持语法高亮
au BufReadPost * if line("'\"") > |if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
"打开到上次阅读位置
当然这只是很简易的,你也可以加上你想要的其他的代码,很多很多的
注: vimrc配置文件是一个很重要的文件,很多插件加入到vim中去,都会在vimrc中添加一些代码,以保证使用的方便性
(2)vim的简单使用
这里就是记忆vim的一些基本命令啦,当然你记得越多越好啦。我这里为了偷懒就直接上王道吧:
这个里面有很多命令,要是都能熟悉,vim也就使用的很不错啦
(二)vim上的小插件
这个光有vim看源代码还是远远不够的,特别是比较大的工程文件,看源代码时候需要到处跳转,查找呀什么的,所以你还需要加入一些小的插件来配合使用,这里面的插件数目非常多,常见的比如ctags、taglist和cscope等等,这里呢我使用的是ctags+taglist组合,就介绍下它们吧。
(1)ctags
ctags因为它的简单小巧方便而被很多程序员所推崇,当然这也是我使用它的主要原因。
(i)安装ctags
1)从http://ctags.sourceforge.net/下载源代码包后,解压缩生成源代码目录,
2)然后进入源代码根目录执行./configure,
3)然后执行make,
4)编译成功后执行make install。
5)在~/.vimrc中增加以下这行:
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
set tags=tags;
set autochdir
这里面第二行就是让ctags优先在本目录查找tags文件
(ii)使用ctags
ctags的使用非常简单,先是在工程源文件目录下,在终端输入下面命令:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
这样就会迭代的生成tags文件,为阅读源代码做好准备的文件,紧接着你就可以在vim里面打开某一个源文件,使用以下几个命令辅助代码阅读:
1) Ctrl-] 跳转到光标所在符号的定义。
2) Ctrl-t 回到上次跳转前的位置。
更多功能通过命令man ctags或在Vim命令行下运行help ctags查询。
(2)taglist
Taglist是vim的一个插件,提供源代码符号的结构化视图。
1)从http://www.vim.org/scripts/script.php?script_id=273下载安装包,也可以从http://vim-taglist.sourceforge.net/index.html下载。
2)进入~/.vim目录,将Taglist安装包解压,解压后会在~/.vim目录中生成几个新子目录,如plugin和doc(安装其它插件时,可能还会新建autoload等其它目录)。
3)进入~/.vim/doc目录,在Vim下运行"helptags ."命令。此步骤是将doc下的帮助文档加入到Vim的帮助主题中,这样我们就可以通过在Vim中运行“help taglist.txt”查看taglist帮助。
4)打开配置文件~/.vimrc,加入以下两行:
let Tlist_Show_One_File=
let Tlist_Exit_OnlyWindow=
到此安装已经完成。
在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭。如下图所示:
二、 源代码的调试
源代码的调试,这里面我自己用的是GDB调试,以前觉得GDB很麻烦,就使用很土的printf调试法,现在还是觉得GDB更强大和高效
(一) GDB
首先,gdb的安装,我记忆中现在的linux版本基本上都是自带的了,如果没有的话那就使用apt-get install安装吧。
(1)GDB调试的准备
这个就是你在使用GCC编译的程序时候,加上一个GCC的编译选项 -g 就可以了,它会告诉编译器生成一些GDB分析时候需要的信息
例如: gcc -g -o test test.c
(2)GDB调试的选项
编译之后,就可以直接使用GDB调试test程序了: gdb test , 这条命令就可以进入到GDB调试test程序的状态中,借着你可以用很多操作:
1)l/list 这个是将test的源代码,每次10行的输出到屏幕上去
2)break + line_num/func_name 在对应的行号上或者函数名上设置断点
break ... if <condition> ..可以是上述的参数,condition表示条件,在条件成立时停住。比如可以设置break if i=100,表示当i为100时停住程序。
break +/-offset 在当前行+/-offset处设置断点
info break 查看已经设置的断点信息
r/run 运行程序,直到断点处
c/continue 继续运行,到下一个断点
n/next 单步运行
p/print var 打印变量的值
bt 查看函数栈堆
finish 退出函数
q 退出GDB
3) 除了上面说的breakpoint之外,还有几种暂停点:观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)
clear 清除上面说的所有暂停点
delete [breakpoints] [range...] 删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)
disable [breakpoints] [range...] 使暂停点失效
enable [breakpoints] [range...] 使暂停点生效
condition <bnum> <expression> 修改断点号为bnum的停止条件为expression 对应上面的根据条件设置断点
condition <bnum>清除断点号为bnum的停止条件。
ignore <bnum> <count>表示忽略断点号为bnum的停止条件count次
4)在暂停点设置运行命令 当运行的程序在被停止住时,我们可以让其自动运行一些别的命令,这很有利行自动化调试。对基于GDB的自动化调试是一个强大的支持。
commands [bnum]
... command-list ...
end
例如: break foo if x>0
commands
printf "x is %d/n",x
continue
end
5)其他命令
u/until 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
ni 当运行完这个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码)
(二) GCOV
gcov是用来统计程序里的代码被执行了多少次,可以方便的定位到代码热点
(1)使用方法:
$ gcc –Wall –fprofile-arcs –ftest-coverage cov.c(或者直接-o生成可执行文件cov.o,否则生成a.out)
// 这就生成了一个可以用于测试代码覆盖的程序,其包含额外的指令用于记录程序执行到的每一行代码的次数。
// “-ftest-coverage”编译选项添加计数被执行到的行的次数,而“-fprofile-arcs”选项合并程序中每条分支中的用于计数的代码。
./a.out(如果先前你-o是生成con.o文件,那就./cov.o)
//此时程序运行中采集到的数据被写入到当前目录下各个后缀名为“.bb”“.bbg”和“.da”的文件中。
$ gcov [-abc] cov.c 生成.gcov文件可以查看
(2)相关选项
-a(--all-blocks) 在.gcov文件中输出每个基本快(basic block)的执行次数。如果没有-a选项,则输出'main'函数这个block的执行次数
-b(--branch-probabilities) 在.gcov文件中输出每个分支的执行频率,并有分支统计信息。
-c(--branch-counts 默认选项) 在.gcov文件中输出每个分支的执行次数。
linux相关小工具的使用(一)————代码相关工具的更多相关文章
- Linux下小工具使用总结
0. 前言 这篇博客仅用于记录个人在工作中用到的一个小工具,后续用到别的会再补充. 1. Tmux 终端分用器(multiplexer),可以在一个屏幕上创建多个终端,这个工具也可以用于结对编程. 个 ...
- AWS成本估算的相关小工具
1.AWS-partner :云势数据做的在线小工具,有微信版本可以使用,但是涉及的服务很少,更新慢,型号缺,界面不友好.不是很理想,连接如下: https://www.goclouds.cn ...
- Linux相关常用工具
Xshell Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的. 通常需要通过vpn访问.建立vpn隧道可以通过FortiClient 或者 I ...
- 用C语言实现解析简单配置文件的小工具
本文介绍作者写的一个小工具,简单的代码中包含了C语言对字符串的处理技巧,对文本文件的简单解析,二进制文件的数据复制的方法,以及格式化输出文本文件的示例. 工具的输入是如下内容的配置文件: ;资源管理器 ...
- C# 小工具开发--DeBugHttp
随着RESTful的流行,前后端分离,我们后端开发人员在开发过程中多http相关方法进行测试.这就是这个小工具的初衷. 代码地址:https://github.com/gdoujkzz/DebugHt ...
- wordpress主题之后台菜单编辑,小工具
1一:菜单编辑 在functions.php 文件加入 if (function_exists('register_nav_menus')) { register_nav_menus(array( / ...
- 【小工具系列】Python + OpenCV 图片序列转换成视频
图片序列转换成视频 最近一直在找一个工具,能够将一堆图片转化成视频.网上找了一些小软件,还有 win10 的照片自带的视频制作功能,都不是很满意. 又不想下载那些专业的视频剪辑软件大材小用. 然后找到 ...
- 三个 DAL 相关的Java代码小工具
最近在做 DAL (Data Access Layer 数据访问层) 的服务化,发现有不少地方是人工编写比较繁琐的,因此写了几个小工具来完成. 1. 从 DAO 类自动生成 CoreService ...
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
随机推荐
- 用U盘烧写Uboot.bin到Nor Flash
1.在开发板上面插上U盘 2.打到 NAND flash模式启动U-boot,输入以下命令打开usb设备. [u-boot@SMDK2440A]# usb reset //以重启的方式 或者用 [u- ...
- 清除大文本中的html标签
public String clearHtmlText(String inputString) { if (StringUtils.isBlank(inputString)) { return &qu ...
- 数据结构与算法javascript描述
<数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScri ...
- JavaWeb学习笔记--Servlet代码集
目录: 登录系统提交表单数据打开PDFCookieURL传递参数URL重写跟踪会话使用HttpSession对象跟踪会话Servlet间协作过滤器Filter 登录系统 <!DOCTYPE HT ...
- Core Data (2)-备用
1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以后的版本中 ...
- [Google Code Jam (Qualification Round 2014) ] B. Cookie Clicker Alpha
Problem B. Cookie Clicker Alpha Introduction Cookie Clicker is a Javascript game by Orteil, where ...
- WINDOWS 2012忘记密码之后。。。
要使用windows server 2012安装DVD,选择光盘引导进入 进入修复系统 选择疑难解答,进入界面 选择命令提示符 切换目录至系统目录 执行move命令 执行 copy命令 重新启动系统, ...
- Intel处理器 天梯图
http://www.mydrivers.com/zhuanti/tianti/cpu/ 更新日期: 2016年6月 纠 错: wenq#mydrivers.com Core 2及之前 ...
- linux下通过yum安装svn及配置
1.环境centos6.4 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve -d -r /www/sv ...
- 深入浅出Node.js (6) - 理解Buffer
6.1 Buffer结构 6.1.1 模块结构 6.1.2 Buffer对象 6.1.3 Buffer内存分配 6.2 Buffer的转换 6.2.1 字符串转Buffer 6.2.2 Buffer转 ...