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

10GBIZ(月$2.36 ), 香港和洛杉矶CN2 GIA

10GBIZ服务商经常有看到隔壁的一些博客分享内容,我翻看网站看之前有记录过一篇,只不过由于服务商是2020年新成立的所以分享内容比较谨慎。这不至今已经有将近两年的服务商而且云服务产品也比较丰富,目前有看到10GBIZ服务商有提供香港、美国洛杉矶等多机房的云服务器、独立服务器和站群服务器。其中比较吸引到我们用户的是亚洲节点的包括香港、日本等七星级网络服务。具体我们看看相关的配置和线路产品。第一、香...

RAKsmart(年79元),云服务器年付套餐汇总 - 香港 美国 日本云服务器

RAKsmart 商家从原本只有专注于独立服务器后看到产品线比较单薄,后来陆续有增加站群服务器、高防服务器、VPS主机,以及现在也有在新增云服务器、裸机云服务器等等。机房也有增加到拥有洛杉矶、圣何塞、日本、韩国、中国香港等多个机房。在年前也有介绍到RAKsmart商家有提供年付129元的云服务器套餐,年后我们看到居然再次刷新年付云服务器低价格。我们看到云服务器低至年79元,如果有需要便宜云服务器的...

昔日数据月付12元起,湖北十堰机房10M带宽月付19元起

昔日数据怎么样?昔日数据是一个来自国内服务器销售商,成立于2020年底,主要销售国内海外云服务器,目前有国内湖北十堰云服务器和香港hkbn云服务器 采用KVM虚拟化技术构架,湖北十堰机房10M带宽月付19元起;香港HKBN,月付12元起; 此次夏日活动全部首月5折促销,有需要的可以关注一下。点击进入:昔日数据官方网站地址昔日数据优惠码:优惠码: XR2021 全场通用(活动持续半个月 2021/7...

linux源代码分析为你推荐
大蟒蛇平台PY平台是什么?发送垃圾短信发送垃圾短信被抓,会别判刑吗?最多判多久发博客如何用word发博客日志?spotlight搜索是什么苹果手机删除过的短信还可在Spotlight搜索到,怎么能彻底删除?百度预测世界杯世界杯,今晚预测...圣诞节网页制作这是我特别为您制作的2011年圣诞节祝福网页,祝您生蛋(圣诞)快乐,好事圆圆,好梦连连!快去看看吧。智能公共广播系统智能广播系统怎么实现?99客服软件下载46级成绩查询忘记准考证怎么办handoff怎么用Hand off怎么用?Costco茅台被抢光Costco在中国大陆第一家店开业首日被挤爆,为什么人们都特别青睐洋货?
租服务器 免费试用vps 老左 adman bbr 息壤主机 精品网 流媒体服务器 搜狗抢票助手 me空间社区 东莞数据中心 什么是服务器托管 网通服务器托管 中国电信宽带测速网 gtt 中国电信宽带测速器 江苏双线服务器 联通网站 linode支付宝 中国域名 更多