linux源代码分析source insight 怎么分析代码,linux shell的bash

linux源代码分析  时间:2021-07-21  阅读:()

Linux下有类似于source insight的代码查看与分析工具吗

vim+cscope+minibufexp+rwcscope : cscope-win32 - Win32 port of cscope utilty,用于各种Symbol的搜索和跳转,包括但不限于源文件名,函数,变量,宏,结构体定义。

minibufexp : minibufexpl.vim,打开多个文件时的标签式管理。

taglist : taglist.vim - Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc) : vim online,文件的Symbol列表 netrw :rw.vim - Network oriented reading, writing, and browsing (keywords:rw ftp scp) : vim online (),目录树浏览。

Screenshot:

透过源码领悟GCC到底在干些什么 GCC源码分析

上半年一直在做有关GCC和LD的项目,到现在还没做完。

最近几天编程的那台电脑坏了,所以趁此间隙写一点相关的分析和经验之类的跟大家共享。

  一、GCC的作用和运行机制   GCC是Linux下重要的编译工具,用法这里就不说了,满大街都找得到。

这里我重点介绍GCC的运作机制,作为代码分析的铺垫。

全篇使用C语言子部件来作分析,因为我对其他语言的编译没有研究。

  根据编译原理,语言的编译分为这么几个步骤:词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等。

然而从编译器使用的角度来看,要把源代码翻译为可执行文件要经过编译和连接两步,与此对应,一个完整的编译系统一定包含编译器和连接器两大功能部件。

编译器要完成编译原理中提到的那些任务;连接器要把编译器生成的代码片段拼接成一个完整的可执行程序。

之所以需要连接器,是因为一般的程序都是多源文件的,而编译器一次只编译一个源文件(称之为翻译单元translation unit),因此需要连接器把所有翻译单元对应的输出合并成一个可执行文件。

  如果一切顺利,可执行程序就可以正确的生成出来。

但是一旦源代码存在某些问题,错误就会被报告出来。

编译器报告的错误一般都是局部错误,它会指明错误在哪个文件第几行;连接器报告的错误一般都是全局错误,而且绝大多数都是多胳膊少腿的问题,比如函数重定义,无法解决的外部符号等,这些错误无法定位到某一行。

  GCC就是这里的编译器。

准确来说,GCC是一个编译驱动器,驱1、as和ld三个部件完成编译、汇编和连接的工作1将C语言源文件编译为汇编文件(.s)。

而将汇编代码转换为二进制指令的工作由AS完成,生成大家都很熟悉的对象文件(.o);生成的这些对象文件再由AR程序打包成静态库(.a),或者由LD程序连接成可执行程序(elf、.so或其他格式)。

而LD就是所谓的连接器。

AS、AR、LD是属于另外一个叫做binutils的软件包的程序,所以要让GCC能够有效运作起来,除了在系统中安装GCC外,还要安装binutils才行。

  以下1、as、ld各司其责的配合完成一个编译过程。

  [plain] view plaincopy    test.c -S -o test.S   as test.S -o test.o   ld test.o -o test   通常所用的“ -c”就相当于“ -S” + as,而对于编译单个源文件一步到位生成可执行“ test.c -o test”相当于上面三个步骤的组合,中间文件被放置在临时目录下。

从这一点看来,GCC除去编译的功能外,更像是个driver,它可以驱动as和ld完成整个的编译,特别是也接受对象文件(.o)和静态库(.a)作为参数用于生成可执行程序,其实背后就是调用的LD,还可以用“-Wl,”选项给LD传递自定义参数。

所以在大多数软件的Makefile里,你很难找到AS和LD的字眼,已经给你包办了。

  GCC源代码里包含的主要就1这部分(还包括一些其他的辅助工具,比如collect2等)。

  二、GCC的安装   要学习和修改GCC源码,首先第一步是在自己的机器上用GCC源代码编译出一个选定版本的GCC(这里以-4.5.2.tar.bz2为例,源码可以从去下载)。

除此之外,GCC依赖于gmp、mpfr、mpc三个库,如果你机器上没有,或者版本太老以至于无法支持新的GCC,那么你还得去把这三个库下载下来。

  一般来说,下载GCC是从GNU的FTP镜像网站去下载,的代码包一般放置在/release/-x.y目录下,而那三个依赖库一般放置在/infrastructure/目录下。

  1、把依赖库和GCC解包   [plain] view plaincopy   tar -vjxf gmp-4.3.2.tar.bz2 -C /usr/src/   tar -vjxf mpfr-2.4.2.tar.bz2 -C /usr/src/   tar -vxf mpc-0.8.1.tar.gz -C /usr/src/   tar -vjxf -4.5.2.tar.bz2 -C /usr/src/ 2、到自己的home目录下编译依赖库   [plain] view plaincopy   cd ~   mkdir gmp-build   cd gmp-build   /usr/src/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2 #指定安装位置   make   make check   make install   cd ~   mkdir mpfr-build   cd mpfr-build   /usr/src/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2   make   make check   make install   cd ~   mkdir mpc-build   cd mpfr-build   /usr/src/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2   make   make check   make install 3、编译GCC   [plain] view plaincopy   cd ~   mkdir -build   cd -build   /usr/src/-4.5.2/configure --prefix=/usr/local/-4.5.2 --with-mpc=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2 --enable-languages=c,c++   make   make install

source insight 怎么分析代码,linux shell的bash

装Source Insight并启动程序,可以进入图1界面。

在工具条上有几个值得注意的地方,如图所示,图中内凹左边的是工程按钮,用于显示工程窗口的情况;右边的那个按钮按下去将会显示一个窗口,里边提供光标所在的函数体内对其他函数的调用图,通过点击该窗体里那些函数就可以进入该函数所在的地方。

由于Source Insight实质上是一个支持多种开发语言(java,c ,c++等等)的编辑器,只不过由于其查找、定位、彩色显示等功能的强大,而被我们当成源代码阅读工具使用。

所以,为了有效的阅读源程序,首先必须选择功能菜单上的 “Project”选项的子菜单“New Project”新建一个项目,项目名称可以自由选定,当然也可以选择删除(Remove)一个项目。

当删除一个项目的时候,并不删除原有的源代码文件,只是将该软件生成的那些工程辅助文件删除。

设定之后,将会弹出一个对话框如图2,接受默认选择,如果,硬盘空间足够,可以将第一个复选框选上,该选项将会需要与源代码大致同等的空间来建立一个本地数据库以加快查找的速度。

由于Source Insight实质上是一个支持多种开发语言(java,c ,c++等等)的编辑器,只不过由于其查找、定位、彩色显示等功能的强大,而被我们当成源代码阅读工具使用。

所以,为了有效的阅读源程序,首先必须选择功能菜单上的 “Project”选项的子菜单“New Project”新建一个项目,项目名称可以自由选定,当然也可以选择删除(Remove)一个项目。

当删除一个项目的时候,并不删除原有的源代码文件,只是将该软件生成的那些工程辅助文件删除。

设定之后,将会弹出一个对话框如图2,接受默认选择,如果,硬盘空间足够,可以将第一个复选框选上,该选项将会需要与源代码大致同等的空间来建立一个本地数据库以加快查找的速度。

点击“OK”按钮 邮苎≡窈螅 嵊幸桓鲂碌亩曰翱虻 觯 谡飧龆曰翱蚶铮 梢匝≡窠 亩恋奈募 尤牍こ蹋 恢址绞绞峭ü 贔ile Name中输入要阅读源代码文件的名称,点击“Add”按钮将其加入,也可以通过其中“Add All”和“Add Tree”两个按钮可以将选中目录的所有文件加入到工程中,其中“Add All”选项会提示加入顶层文件和递归加入所有文件两种方式,而“Add Tree”相当于“Add All”选项的递归加入所有文件,可以根据需要使用,就我来说,更喜欢“Add Tree”一些。

由于该程序采用了部分打开文件的方式,没有用到的文件不会打开,所以,加入数千个文件也不用担心加入的文件超出程序的所能容忍的最大值,我就是采用“Add Tree”的方式将Linux2.4内核的四千五百九十一个文件加入的。

图3 添加文件 加入文件后,点击一个文件,可以出现使用界面,如图4所示,其中,右边的那个窗口(Linux Project,即工程窗口)缺省按照字母顺序列出当前工程中所有的文件。

图4 工作窗口 点击一个文件就可以打开该文件,显示如图5所示,进入到右边的那个窗口分别可以以文件列表的方式,列出所有的文件,每个窗体下边有一排按钮,左边的窗口(21142.c)从左至右分别为:按字母顺序排列所有标记、按照文件中行数顺序排列标记、按照类型排列标记、浏览本地文件标记、标记窗口属性。

右边的窗口(Linux Project)从左至右分别为:按字母顺序文件列表、显示文件夹、按照文件类型归类文件、全部文件的所有标记列表、按照标记类型归类标记、跳转到定义处、显示标记信息、浏览工程标记、查找函数调用、工程属性,其中全部文件的所有标记列表选项可能要一段时间抽取标记,同步到数据库去,如果开始选择了建立标记数据库,将会在今后节省同步时间,最有用的莫过于浏览标记信息和查找函数调用,前者可以通过“Jump”按钮在不同的地方查找同样的标志,还可以通过“Reference”按钮结合后者进行全局的标记查找。

Reference功能是Source Insight的特色之一,它可以在速度极快的在整个工程中找到所有的标记,并且在该行程序的前边加上红色箭头的小按钮链接上。

图6是一个Reference搜索后的结果,它可以有两种模式,一种集中显示结果,图6显示的就是这种模式,在这种模式下,可以通过前边的红色箭头小按钮进入另外一种模式,该标记的具体的所在处,也可以通过标记的具体所在处点击红色箭头小按钮进入警种模式,还可以通过工具条上的两个红色小箭头直接在第二种模式下前后移动,察看相应信息。

它的这个强大的功能使得阅读Linux源程序有如神助。

但是要注意的是,当进行了第二次“Reference”时,它会提示你将结果集附加在第一个结果集的后边还是取代第一个结果集。

如果选择前者,不能对结果集根据前后两次搜索结果进行分类,然后在其子类里进行移动,只能在整个结果集里移动;如果,选择后者,结果集将会被替换为第二次搜索的结果,略微有些不方便。

图6 Reference的搜索结果 当然,Source Insight 还提供了一些其他常见的便利。

比如:右键菜单几乎包含了程序的所有功能,可以在编辑窗口为程序加上行号,还可以统计整个工程的程序行数,当然还有功能强大却用不上自动完成功能,似乎连它的30天试用期也是别有用心――可以迫使你尽可能快速的阅读源程序,其他一些技巧大家可以在使用过程中慢慢摸索。

怎么样?爱好读源代码的朋友,不妨马上去下载一个,去开始我们的Linux内核探险之旅吧

RackNerd 黑色星期五5款年付套餐

RackNerd 商家从2019年上线以来争议也是比较大的,一直低价促销很多网友都认为坚持时间不长可能会跑路。不过,目前看到RackNerd还是在坚持且这次黑五活动也有发布,且活动促销也是比较多的,不过对于我们用户来说选择这些低价服务商尽量的不要将长远项目放在上面,低价年付套餐服务商一般都是用来临时业务的。RackNerd商家这次发布黑五促销活动,一共有五款年付套餐,涉及到多个机房。最低年付的套餐...

弘速云(28元/月)香港葵湾2核2G10M云服务器

弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统,目前推出全场vps新开7折,...

新加坡云服务器 1核2Gg 46元/月 香港云服务器 1核2G 74元/月 LightNode

LightNode是一家成立于2002年,总部位于香港的VPS服务商。提供基于KVM虚拟化技术.支持CentOS、Ubuntu或者Windows等操作系统。公司名:厦门靠谱云股份有限公司官方网站:https://www.lightnode.com拥有高质量香港CN2 GIA与东南亚节点(河内、曼谷、迪拜等)。最低月付7.71美金,按时付费,可随时取消。灵活满足开发建站、游戏应用、外贸电商等需求。首...

linux源代码分析为你推荐
android半透明android控件怎么做到半透明?大蟒蛇平台PY平台是什么?安卓性能测试工具谁能介绍几个测试手机性能的软件?msn邮箱后缀MSN 可以添加哪些后缀的色中色luntancoreldraw x6怎么抠图换背景百度创业史百度成立的历史windows7系统要求windows7的系统盘要求最低是多少客服系统方案客户服务系统的设计与实现的开题报告angel的意思Angel、的中文意思金山铁路最新时刻表金山北至上虞北高铁时间表
日本vps 花生壳域名贝锐 locvps 国外服务器 512m内存 mysql主机 中国特价网 南昌服务器托管 免费smtp服务器 e蜗牛 新天域互联 me空间社区 域名接入 raid10 双线asp空间 vul 个人免费邮箱 mteam tracker服务器 亿库 更多