精华内容
下载资源
问答
  • linux源码分析工具

    千次阅读 2017-09-10 23:51:49
    linux源代码分析和阅读工具比较 Windows下的源码阅读工具Souce Insight 凭 借着其易用性和多种编程语言的支持,无疑是这个领域的“带头大哥”。Linux/UNIX环境下呢?似乎仍然是处于百花齐放,各有千秋的春秋...

    linux源代码分析和阅读工具比较



    Windows下的源码阅读工具Souce Insight 凭 借着其易用性和多种编程语言的支持,无疑是这个领域的“带头大哥”。Linux/UNIX环境下呢?似乎仍然是处于百花齐放,各有千秋的春秋战国时代,实 际上,似乎其环境下的任何软件都是处于一种逐鹿中原的态势,也许这就是“集市”之于“大教堂”的优势所在吧!主要的交叉索引工具有:ctags 、 cscope 、 global 、 lxr 、 KScope 、 sourcenav 、 calltree 、 CodeViz 、ncc 、gprof 等。 下面将就各软件的优劣作一简单介绍。这里面当中,我当前分析过他们的源码的有lxr、sourcenav、calltree、ncc。现在正在 sourcenav的基础上进行我需要的改造以更合适分析内核需要。KScope需要进一部考察和分析,如果KScope的代码分析能力(也就是 scope的能力)跟得上sourcenav可能到时会放弃sourcenav转到KScope开发,因为sourcenav的界面和交互性都不怎么好。

    1. ctags


         ctags应该是几个里面最古老的一个了,当然也是获得支持最多的一个,vim默认就支持ctags产生的tag数据库,不过原来的ctags名符其实, 只支持C语言,且分析不够细腻。其新版本名为exuberant ctags,但是它已经远远超出了它名字的范畴,支持包括C语言在内的33种编程语言,准确度上也不错,并且它的开发仍在如火如荼地进行着,前途无量啊!
    配合vim使用,基本上能满足用户的要求。
    常用命令:
    建立数据库命令:

    exuberant-ctags

    在vim编辑器中浏览:

     

    :ta x
    跳转到符号x的定义处,如果有多个符号,直接跳转到第一处
    :ts x
    列出符号x的定义
    :tj x
    可以看做上面两个命令的合并,如果只找到一个符号定义,那么直接跳转到符号定义处,如果有多个,则让用户自行选择。
    Ctrl+]
    跳转到当前光标下符号的定义处,和ta类似。
    Ctrl+t
    跳转到上一个符号定义处,和上面的配合基本上就能自由跳转了。
    另外两个:tn, :tp是在符号的多个定义之间跳转

    美中不足,只能查找符号的定义,不能实现交叉引用查询等其它功能。

    2. Cscope

     

         相比ctags的只能查找符号的定义,cscope则显得更加丰富,虽然他支持C语言,但是它除了能查找函数的定义,还能查找函数在哪里被调用过等,所以能在一定程度上弥补ctags的不足。
    常用命令:
    建立数据库的命令:

    cscope和vim配合使用:

    不再重复vim文档了,自己通过命令
    :help cscope
    去详细学习吧。

    比较遗憾的是,cscope的最后一次更新是在2003年,这个项目似乎也是被人抛弃了,希望以后能被人收养,或者和其它项目合并。

    3. Global


         Global是GNU出品的交叉索引工具,支持C, C++, Yacc, Java 和PHP4五种语言,命令行下表现不错,但是和vim配合使用,就不如前面两个更加亲切了。其特色在于分析得很细腻,我所研究过的,暂时只能 soucenav能超过它。能生成交叉索引的web页,很适合用来做程序的文档。数据库是从berkeley BD 3上改过来的。但和我的要需求却有比较大的差距。因为它只有一个WEB的前端,在功能上,他现有的前端也只实现符号查询和交叉引用查询。

    4. LXR

     

         Linux超文本交叉代码检索工具LXR(Linux Cross Reference),是由挪威奥斯陆大学数学系Arne Georg Gleditsch和Per Kristian Gjermshus编写的。这个工具实际上运行在Linux或者Unix平台下,通过对源代码中的所有符号建立索引,从而可以方便的检索任何一个符号,包 括函数、外部变量、文件名、宏定义等等。不仅仅是针对Linux源代码,对于C语言的其他大型的项目,都可以建立其lxr站点,以提供开发者查询代码,以 及后继开发者学习代码。   
         目前的lxr是专门为Linux下面的Apache服务器设计的,通过运行perl脚本,检索源代码索引文件,将数据发送到网络客户端的Web浏览器上。 任何一种平台上的Web浏览器都可以访问,这就方便了习惯在Windows平台下工作的用户。 关于lxr的英文网站为http://lxr.linux.no/ ,在中国Linux论坛http://www.linuxforum.net 上有其镜象。
         好的说完了。说说缺点,可能我分析得不深入,它的代码不是用C写的,是网页脚本,程序也很短,没有看到有应用数据库。很多的东西都是你浏览的时候才生成的,所以拿过来用或改造的潜力有限,而且代码分析的不够Global细腻。

    5. KScope

     

         KScope是cscope的图形前端,他为那些不熟悉vim或者是不习惯终端作业的人提供了图形界面的选择,界面是这一款软件的一个亮点,比 source insight还好看,从windows转过来做Linux开发的人可能感觉比较亲切。这也是我最近动心的原因。另外,它还有个比较迷人的特点:能生成函 数调用树。但说百了,其实是调用graphviz画出来的。

    6. sourcenav

         snavigator是一个不错的源代码编辑和项目管理软件。有Windows和Linux版本。网址http://sourceforge.net/projects/sourcenav 。
         基本介绍:Source-Navigator is a source code analysis tool. With it, you can edit your source code, display relationships between classes and functions and members, and display call trees.
         这种工具号称是source insight是linux对手,和确,经过我这一轮的GOOGLE后,从分析性能上,只有他和source insight的能平行的。但可操作性方面就远远没有source insight强了,很多功能用起来都没有source insight顺心。界面就比kScope差很远了,这也就是我对KScope心动的原因。和source insight比,还有一点不行的就是,需然生成交叉引用是在后台进行了,但它是一次性连续生成的,而source insight生成是,则更为优先生成客户当前的代码,source insight这一点对客户的考虑真不错。数据库方面采用的也是berkeley BD 4,他和Global一样,在数据库的使用方面,第个表只采用了两个字端,KEY和DATA,也就是说没采用Secondary Databases,这导致很多时候都是把全部的记录返回,然后再优程序来筛选,这种方式把数据库的优点全给埋没了,要知道对linux这类原码,交叉引 用数据库可能达几百M,这么干内存也不够,速度也更不用谈。我还没有研究KScope不知它在这方面怎么样,我觉得sourcenav这方面肯定要改掉。 把数据筛选的工作完全由数据库来做,他们会做得很好。
         可开发性方面,sourcenav做得还算不错,有用户文档和开发文档,代码结构也比较可能,TCL编程也直对比较容易。可以在它原来功能的基础上进行功能扩充。接下来的几编BLOG,我会对它的源码进行分析。   

    7. 其它源码分析工具

         除了上述的体系比较完整的工具外,还有很多源源分析的小工具。这些小工具多数是用来绘制函数调用关系图的。

         绘制函数调用关系图对理解大型程序大有帮助。我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历。如 果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力。不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了。如果在读代码之前,手边就有一份调用图,岂不妙 哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具。

        函数调用关系图(call graph)是图(graph),而且是有向图,多半还是无环图(无圈图)——如果代码中没有直接或间接的递归的话。Graphviz 是专门绘制有向图和无向图的工具,所以很多call graph分析工具都以它为后端(back end)。那么前端呢?就看各家各显神通了。

         调用图的分析分析大致可分为“静态”和“动态”两种,所谓静态分析是指在不运行待分析的程序的前提下进行分析,那么动态分析自然就是记录程序实际运行时的函数调用情况了。

        静态分析又有两种方法,一是分析源码,二是分析编译后的目标文件。

    分析源码获得的调用图的质量取决于分析工具对编程语言的理解程度,比如能不能找出正确的C++重载函数。Doxygen 是源码文档化工具,也能绘制调用图,它似乎是自己分析源码获得函数调用关系的。GNU cflow也是类似的工具,不过它似乎偏重分析流程图(flowchart)。

         对编程语言的理解程度最好的当然是编译器了,所以有人想出给编译器打补丁,让它在编译时顺便记录函数调用关系。CodeViz (其灵感来自Martin Devera (Devik) 的工具 )就属于此类,它(1.0.9版)给GCC 3.4.1打了个补丁。另外一个工具egypt 的思路更巧妙,不用大动干戈地给编译器打补丁,而是让编译器自己dump出调用关系,然后分析分析,交给Graphviz去绘图。不过也有人另起炉灶,自己写个C语言编译器(ncc ),专门分析调用图,勇气可嘉。不如要是对C++语言也这么干,成本不免太高了。分析C++的调用图,还是借助编译器比较实在。

         分析目标文件听起来挺高深,其实不然,反汇编的工作交给binutils的objdump去做,只要分析一下反汇编出来的文本文件就行了。下面是Cygwin下objdump -d a.exe的部分结果:

    00401050 <_main>:
    401050:       55                      push   %ebp
    401051:       89 e5                   mov    %esp,%ebp
    401053:       83 ec 18                sub    $0x18,%esp
       ......
    40107a:       c7 44 24 04 00 20 40    movl   $0x402000,0x4(%esp)
    401081:    &n

    401082:       c7 04 24 02 20 40 00    movl   $0x402002,(%esp)
    401089:       e8 f2 00 00 00          call   401180 <_fopen>

         从中可以看出,main()调用了fopen()。CodeViz带有分析目标文件的功能。

         动态分析是在程序运行时记录函数的调用,然后整理成调用图。与静态分析相比,它能获得更多的信息,比如函数调用的先后顺序和次数;不过也有一定的缺点,比如程序中语句的某些分支可能没有执行到,这些分支中调用的函数自然就没有记录下来。

         动态分析也有两种方法,一是借助gprof的call graph功能(参数-q),二是利用GCC的 -finstrument-functions 参数。

    gprof生成的输出如下:

    index % time    self children    called     name
                    0.00    0.00       4/4           foo [4]
    [3]      0.0    0.00    0.00       4         bar [3]
    -----------------------------------------------
                    0.00    0.00       1/2           init [5]
                    0.00    0.00       1/2           main [45]
    [4]      0.0    0.00    0.00       2         foo [4]
                    0.00    0.00       4/4           bar [3]
    -----------------------------------------------
                    0.00    0.00       1/1           main [45]
    [5]      0.0    0.00    0.00       1         init [5]
                    0.00    0.00       1/2           foo [4]
    -----------------------------------------------

         从中可以看出,bar()被foo()调用了4次,foo()被init()和main()各调用了一次,init()被main()调用了一次。用 Perl脚本分析gprof的输出,生成Graphviz的dot输入,就能绘制call graph了。这样的脚本不止一个人写过:http://www.graphviz.org/Resources.php ,http://www.ioplex.com/~miallen/ 。

    GCC的-finstrument-functions 参数的作用是在程序中加入hook,让它在每次进入和退出函数的时候分别调用下面这两个函数:

    void __cyg_profile_func_enter( void *func_address, void *call_site )
                                    __attribute__ ((no_instrument_function));
    void __cyg_profile_func_exit ( void *func_address, void *call_site )
                                    __attribute__ ((no_instrument_function));

         当然,这两个函数本身不能被钩住(使用no_instrument_function这个__attribute__),不然就反反复复万世不竭了:) 这里获得的是函数地址,需要用binutils中的addr2line这个小工具转换为函数名,如果是C++函数,还要用c++filt进行name demangle。具体方法在《用Graphviz 可视化函数调用 》中有详细介绍,这里不再赘述。

         从适应能力上看,源码分析法是最强的,即便源码中有语法错,头文件不全也没关系,它照样能分析个八九不离十。而基于编译器的分析法对源码的要求要高一些, 至 少能编译通过(gcc 参数 -c)——能产生object file,不一定要链接得到可执行文件。这至少要求源码没有语法错,其中调用的函数不一定有定义(definition),但要有声明 (declaration),也就是说头文件要齐全。当然,真的不全也没关系,自己放几个函数声明在前面就能糊弄编译器:) 至于动态分析,要求最高——程序需得运行起来。如果你要分析的是操作系统中某一部分,比如内存管理或网络协议栈,那么这里提到的两种动态分析法恐怕都不适 用了。

    8. 网上的其它资源

    [1] 使用Gnu gprof进行Linux平台下的程序分析 
    [2] The DOT Language
    http://www.graphviz.org/doc/info/lang.html 
    [3] Graphviz - Graph Visualization Software
    http://www.graphviz.org/ 
    [4] Coverage Measurement and Profiling
    http://www.linuxjournal.com/article/6758 
    [5] 用Graphviz进行可视化操作──绘制函数调用关系图 
    [6] cscope
    http://cscope.sourceforge.net/ 
    [7] KFT(Kernel Function Tracing)
    http://elinux.org/Kernel_Function_Trace 
    ftp://dslab.lzu.edu.cn/pub/kft 
    [8] Call Graph -- Gprof
    http://sourceware.org/binutils/docs-2.17/gprof/Call-Graph.html#Call-Graph 
    [9] 各类分析函数调用关系图的工具 
    http://oss.lzu.edu.cn/blog/blog.php?do_showone/tid_1636.html

    展开全文
  • linux源码分析

    2018-04-27 16:17:33
    第一章 走进linux 1.1 GNU与Linux的成长 ...1.7 Linux内核源代码分析工具 1.7.1 Linux超文本交叉代码检索工具 1.7.2 Windows平台下的源代码阅读工具Source Insight 第二章 Linux运行的硬件基
  • Linux内核分析电子书六本.源码.分析工具LINUX内核源代码情景分析Linux_0_01_内核分析与操作系统设计LINUX系统分析与高级编程技术
  • Linux内核源码阅读工具——source insight4.0Source insight4.0工具的使用入门一、Souce insight建立工程、导入源码二、遍历所有源码文件建立符号索引 Source insight4.0工具的使用入门 本篇博客为学习同步更新博客...

    Source insight4.0工具的使用入门

    本篇博客为学习同步更新博客,学习如何使用source insight查看linux内核源码以及工具的使用技巧。
    source insight4.0官方文档:https://www.sourceinsight.com/doc/v4/userguide/index.html#t=Manual%2FFrontMatter%2FFrontMatter.htm

    一、Souce insight建立工程、导入源码

    1. Source insight建立工程
      在这里插入图片描述
    2. 点击OK进入工程设置页面,主要关注点在于内核源代码目录位置的设置
      在这里插入图片描述
    3. 之后会进入添加和删除工程文件的操作步骤(Add and Remove Project Files),此步骤目的是选择我们要使用的源代码导入到工程中,窗口右侧提供了Add、Add All 、Add Tree三种添加方法,可自行选择,这里直接选择Add Tree即可将我的linux-2.6.30-1的整个目录树中的文件导入进去。
      另外值得一提的是:左边的Directory窗口默认的目录选择为linux-2.6.30-1这一目录,是因为在上一步设置此目录为工程源码目录。
      在这里插入图片描述
    4. 导入完毕后点击close结束工程创建步骤。
      在这里插入图片描述
    5. 打开我们的工程窗口查看一下,是否所有的源文件已成功导入?
      在这里插入图片描述

    二、遍历所有源码文件建立符号索引

    在完成工程的创建之后,我们查看工程窗口(Project Window),发现Project Files的子页面里面成功导入了我们所有的源代码,但是查看工程符号索引页面(Project Symbols)却发现里面什么都没有。
    在这里插入图片描述
    随便阅读一个源码点击某个自定义的函数返回值,或者是宏定义发现也无法找到该自定义的函数或宏符号。在这里插入图片描述
    这是因为我们没有让source insight分析我们的所有源代码建立符号索引表的数据库(建立一个高效的源码符号索引数据库是source insight的特色所在),因此我们需要进行工程同步分析
    在这里插入图片描述
    在这里插入图片描述然后耐心等待分析完毕后,发现我们的符号索引表(Project Symbols)建立成功,并且刚才无法找到的自定义符号位置也成功找到并跳转成功,发现它是个宏定义!接下来,你就可以快乐的进入源码阅读的步骤了。
    在这里插入图片描述

    三、源码阅读技巧

    1、Relation窗口(某一函数或宏定义的调用或使用列表显示)

    在上方的工具栏里点击我们的Relation Window按钮即可显示我们的Relation窗口,如果发现列表中无内容可以点击下方的刷新按钮进行刷新。Relation窗口提供了三种显示方法来显示某一自定义符号(函数或宏定义等)的调用或使用情况,包括调用或使用该符号的所有源文件位置、源文件中调用或使用该符号的行位置等信息。
    下图例子显示了我们刚才测试的INIT_DELAYED_WORK宏定义的所有使用位置。
    在这里插入图片描述
    不同的显示视图不同的视图

    四、入门级的使用总结

    在这里插入图片描述源码编辑窗:光标移动到某一符号位置source insight会进行自动解析。
    窗口1:解析显示该文件所有的符号,该窗口最下边的按钮栏提供了排序等功能。
    窗口2:显示光标位置的符号在该文件中的所有使用或调用位置。
    窗口3:显示光标位置的符号的定义位置(宏定义或函数定义等)
    窗口4:Relation窗口,显示光标位置的符号在工程中所有源码文件中的使用或调用位置。
    当想取查看其它源码文件时,就要在右上部分的菜单栏中呼出Project Window来选择其他源码文件。

    展开全文
  • 这是每个内核版本的 Linux 性能分析工具和仪表板的子集。 这个项目的想法是创建一个公共网页,在那里可以使用一些基本的性能工具测试 linux 内核下一个分支(仍未合并到 linux 内核上)的所有补丁。 基本工具集( ...
  • Linux内核源码分析,学习内核很不错的工具
  • Linux内核源码+查看工具Linux内核源码+查看工具Linux内核源码+查看工具
  • jstat java工具linux上的源码分析

    千次阅读 2012-04-10 15:59:46
    jstat通常是作为使用查看gc 状态,编译信息等具体信息,加载class量等,笔者在前面的博客里谈了jmap,jstack工具的如何实现可具体参考...也就是在使用jmap, jstack工具的时候会有线程的停顿感

    jstat通常是作为使用查看gc 状态,编译信息等具体信息,加载class量等,笔者在前面的博客里谈了jmap,jstack工具的如何实现可具体参考(http://blog.csdn.net/raintungli/article/details/7023092) ,谈到通常的方法必须让jvm的所有线程进入一个safe point的状态,也就是在使用jmap, jstack工具的时候会有线程的停顿感,并且影响到当时jvm所正在处理的事情,如果在产线上这是会影响客户体验的。

     在调用jstat 的时候,并没有感觉到线程的停顿,也就是jstat 使用与jmap,jstack完全不同的方式,接着还是源码分析来解释。

    在jstat.java中初始化LocalMonitoredVM中,初始化了PerfDataBuffer, 在PerfDataBuffer是通过Perf attach vm的进程生成byte buffer对象

      private ByteBuffer attachImpl(String user, int lvmid, int mode)
                throws IllegalArgumentException, IOException
        {
            final ByteBuffer b = attach(user, lvmid, mode);
    
            if (lvmid == 0) {
                // The native instrumentation buffer for this Java virtual
                // machine is never unmapped.
                return b;
            }
            else {
                // This is an instrumentation buffer for another Java virtual
                // machine with native resources that need to be managed. We
                // create a duplicate of the native ByteBuffer and manage it
                // with a Cleaner object (PhantomReference). When the duplicate
                // becomes only phantomly reachable, the native resources will
                // be released.
    
                final ByteBuffer dup = b.duplicate();
                Cleaner.create(dup, new Runnable() {
                        public void run() {
                            try {
                                instance.detach(b);
                            }
                            catch (Throwable th) {
                                // avoid crashing the reference handler thread,
                                // but provide for some diagnosability
                                assert false : th.toString();
                            }
                        }
                    });
                return dup;
            }
        }
        private native ByteBuffer attach(String user, int lvmid, int mode)
                       throws IllegalArgumentException, IOException;
    

    关键就在native程序中, 查看perf.cpp 中对应的方法

    PerfMemory::attach(user_utf, vmid, (PerfMemory::PerfMemoryMode) mode,
                         &address, &capacity, CHECK_NULL);

    也就是类PerfMemory的attach方法

    在perfMemory_linux.cpp中,我们看到了attach 的实现

    void PerfMemory::attach(const char* user, int vmid, PerfMemoryMode mode, char** addrp, size_t* sizep, TRAPS) {
    
      if (vmid == 0 || vmid == os::current_process_id()) {
         *addrp = start();
         *sizep = capacity();
         return;
      }
    
      mmap_attach_shared(user, vmid, mode, addrp, sizep, CHECK);
    }

    在mmap_attach_shared函数中,

     char* filename = get_sharedmem_filename(dirname, vmid);
    
      // copy heap memory to resource memory. the open_sharedmem_file
      // method below need to use the filename, but could throw an
      // exception. using a resource array prevents the leak that
      // would otherwise occur.
      char* rfilename = NEW_RESOURCE_ARRAY(char, strlen(filename) + 1);
      strcpy(rfilename, filename);
    
      // free the c heap resources that are no longer needed
      if (luser != user) FREE_C_HEAP_ARRAY(char, luser);
      FREE_C_HEAP_ARRAY(char, dirname);
      FREE_C_HEAP_ARRAY(char, filename);
    
      // open the shared memory file for the give vmid
      fd = open_sharedmem_file(rfilename, file_flags, CHECK);
      assert(fd != OS_ERR, "unexpected value");
    
      if (*sizep == 0) {
        size = sharedmem_filesize(fd, CHECK);
        assert(size != 0, "unexpected size");
      }
    
      mapAddress = (char*)::mmap((char*)0, size, mmap_prot, MAP_SHARED, fd, 0);
    

    该函数把一个文件mmap成内存,然后通过读取内存来读取该文件的内容,而文件的路径就是/tmp/hsperfdata_{userid}/{pid} 

    而在create_shared_memory函数中,也就是jvm 在vm_init_globals初始化后会创建这个文件并且用mmap映射成内存,接着虚拟机会把gc 或者其他需要的状态写入这个mmap文件中,jstat工具通过访问该文件,读取内容,显示在屏幕上,该文件通过内存映射实现,没有什么性能损耗,完整的jstat 的流程就全部走通了。





    展开全文
  • [源码分析][Linux]内核工具Sparse

    千次阅读 2016-06-15 00:08:54
    Sparse诞生于2004年,是由Linux之父开发的,目的就是提供一个静态检查代码的工具,从而减少Linux内核的隐患。起始,在Sparse之前已经有了一个不错的代码静态检查工具(SWAT),只不过这个工具不是免费软件,使用上有...
  • Linux 性能分析工具 nmon for Linux

    万次阅读 2014-12-04 16:39:48
    nmon 是 Nigel's performance Monitor for Linux on POWER, x86, x86_64, Mainframe & now ARM (Raspberry Pi) 的缩写,意思是 Nigel(nmon 的作者是 Nigel Griffiths) 的 Linux 性能检测器。这一系统管理员、调谐器...
  • Linux内核源码阅读以及工具(转)

    万次阅读 2018-09-21 01:04:33
    Linux内核源码阅读以及工具(转) 转载地址:Linux内核源码阅读以及工具(转)
  • 线性分析 Linux 平台分析工具 - 检查/测试所需的 KABI 和 KAPI 以支持用户空间
  • 逻辑分析仪 基本Linux日志分析工具。 React用于前端
  • Linux源码分析利器Ctags

    千次阅读 2016-05-03 23:16:48
    最近有看一些代码量比较大的开源代码,在阅读的过程中感觉读大型的源码真的好难。我们先不说其逻辑方面的难度,而是你在读的过程中所遇到的大量的宏定义,类型定义,...其实linux下就有这个工具ctags1.Ctags的安装方法
  • 在我们常用的Jstack, Jmap 用于分析java虚拟机的状态的工具,通过起另一个虚拟机通过运行sun.tools包下的java文件,去跟踪另一个虚拟机的状态。 如果让你设计一个跟踪另一个进程的方法,你也通常会考虑这几种...
  •  在Windows下有sourceinsight这个源码阅读软件(虽然我没用过,但是网上评价还不错),由于我是个Linuxer,并不喜欢用Windows,所以自然是选择在Linux下阅读源码工具了。  下面我将逐一介绍在Linux下阅读源码...
  • linux性能分析工具gprof

    千次阅读 2008-12-29 11:41:00
    linux gprof是一个很强大又方便易用的性能分析工具,可以查看函数的调用次数/执行时间,方便找到程序的性能瓶颈所在。编译时加入 -pg 即可,假设产生的程序文件是 app,运行程序并且在程序结束之后会出现gmon.out之...
  • linux里面使用了mmap初始化,源码如下 address polling_page = (address) ::mmap(NULL, Linux::page_size(), PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); 2. 编译 java 的JIT 会直接编译一些热门的...
  • 等待信号,而在linux里是通过sem_wait()来实现,接受到SIGBREAK(linux 中的QUIT)信号的时候(关于信号处理请参考笔者的另一篇博客 :java 中关于信号的处理在linux下的实现 ),第一次通过调用 AttachListener::is_...
  • Linux性能分析工具汇总合集

    千次阅读 2019-05-15 18:13:35
    如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。 本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg ...
  • Modultils工具源码分析之insmod篇
  • Linux内核源码阅读以及工具详解

    千次阅读 2020-02-02 12:08:39
    接上篇Linux内核源码下载方法 这篇总结了如何利用source insight对Linux内核代码进行阅读和学习(资料来源于网络) 随着linux的逐步普及,现在有不少人对于Linux的安装及设置已经比较熟悉了。与Linux 的蓬勃发展...
  • Linux下网络数据包抓取源码分析和包过滤,请大家下载学习,用C开发的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,375
精华内容 36,550
关键字:

linux源码分析工具

linux 订阅