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

DiyVM:50元/月起-双核,2G内存,50G硬盘,香港/日本/洛杉矶机房

DiyVM是一家比较低调的国人主机商,成立于2009年,提供VPS主机和独立服务器租用等产品,其中VPS基于XEN(HVM)架构,数据中心包括香港沙田、美国洛杉矶和日本大阪等,CN2或者直连线路,支持异地备份与自定义镜像,可提供内网IP。本月商家最高提供5折优惠码,优惠后香港沙田CN2线路VPS最低2GB内存套餐每月仅50元起。香港(CN2)VPSCPU:2cores内存:2GB硬盘:50GB/R...

华纳云新人下单立减40元/香港云服务器月付60元起,香港双向CN2(GIA)

华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供数据中心基础服务、互联网业务解决方案, 以及香港服务器租用、香港服务器托管、香港云服务器、美国云服务器,云计算、云安全技术研发等产品和服务。其中云服务器基于成熟的 ...

Digital-VM80美元新加坡和日本独立服务器

Digital-VM商家的暑期活动促销,这个商家提供有多个数据中心独立服务器、VPS主机产品。最低配置月付80美元,支持带宽、流量和IP的自定义配置。Digital-VM,是2019年新成立的商家,主要从事日本东京、新加坡、美国洛杉矶、荷兰阿姆斯特丹、西班牙马德里、挪威奥斯陆、丹麦哥本哈根数据中心的KVM架构VPS产品销售,分为大硬盘型(1Gbps带宽端口、分配较大的硬盘)和大带宽型(10Gbps...

linux源代码分析为你推荐
微软将停止支持32位Win10系统微软即将停止支持当前操作系统,如果不升级会怎么样magento2MRP与MRP2的区别百度创业史百度能创业成功的原因是什么电梯物联网平台国内物联网公司排名,知道的帅哥美女快来回答哦!谢谢了!创业好项目论坛1000元创业有什么好项目可以做?nero教程NERO怎么使用?pps电影PPS里面好看的电影.推荐一下.发送验证码微信登录需要好友发验证码怎么办oa源码phpoa开源协同oa办公系统v4.0官方免费版怎么用安全加固建筑结构加固施工过程中的安全措施有哪些
新加坡虚拟主机 备案域名查询 韩国vps 免费com域名申请 主机评测 站群服务器 68.168.16.150 国外空间服务商 12306抢票助手 阿里校园 免费美国空间 免费申请个人网站 网游服务器 东莞主机托管 畅行云 可外链的相册 空间申请 卡巴斯基试用版下载 xshell5注册码 更多