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内核探险之旅吧

星梦云-100G高防4H4G21M月付仅99元,成都/雅安/德阳

商家介绍:星梦云怎么样,星梦云好不好,资质齐全,IDC/ISP均有,从星梦云这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,星梦云专注四川高防服务器,成都服务器,雅安服务器,。活动优惠促销:1、成都电信夏日激情大宽带活动机(封锁UDP,不可解封):机房CPU内存硬盘带宽IP防护流量原价活动价开通方式成都电信优化线路2vCPU2G40G+60G21...

安徽BGP云服务器 1核 1G 5M 29元/月 香港云服务器 1核 1G 19元首月 麻花云

麻花云怎么样?麻花云公司成立于2007年,当前主打产品为安徽移动BGP线路,数据中心连入移动骨干网。提供5M,10M大带宽云主机,香港云服务器产品,数据中心为香港将军澳机房,香港宽频机房 cn2-GIA优质线路、采用HYPER-V,KVM虚拟技术架构一、麻花云官网点击直达麻花云官方网站合肥网联网络科技有限公司优惠码: 专属优惠码:F1B07B 享受85折优惠。最新活动 :双11 云上嗨购 香港云主...

Buyvm:VPS/块存储补货1Gbps不限流量/$2起/月

BuyVM测评,BuyVM怎么样?BuyVM好不好?BuyVM,2010年成立的国外老牌稳定商家,Frantech Solutions旗下,主要提供基于KVM的VPS服务器,数据中心有拉斯维加斯、纽约、卢森堡,付费可选强大的DDOS防护(月付3美金),特色是1Gbps不限流量,稳定商家,而且卢森堡不限版权。1G或以上内存可以安装Windows 2012 64bit,无需任何费用,所有型号包括免费的...

linux源代码分析为你推荐
百度创业史简论《创业史》的思想内容.艺术手法微信语音在哪个文件夹微信语音在哪个文件夹 微信语音导出及amr格式转换罗振宇2017跨年演讲罗胖的 “侠爷泼妖” 是什么梗,跨年演讲时提到的~发送验证码怎样向好友发微信验证码kakaotalk是什么kakao是什么意思微信小程序开发技术微信小程序开发需要什么技能跟技术?开源视频会议请问用Adobe的FMS作为二次开发平台,开发视频会议、视频通讯应用可行吗?有什么优势和弊端?恳请内行人开源视频会议将网络视频会议替代原来的面对面会议具有哪些方面的好处呢?超级快递百度云超级快递在哪里下载完整的,知道的告诉下魔豆365魔豆怎么种才好
ipage 12306抢票攻略 国外网站代理服务器 福建天翼加速 域名和空间 gtt 酷番云 腾讯总部在哪 西安服务器托管 空间申请 数据湾 海外加速 阿里云宕机故障 压力测试工具 瓦工工资 国外bt网站 vpn服务器架设 大容量存储控制器 北京自住房申请网站 北京市机动车牌照申请网站 更多