很多开源软件都可以分析C语言的函数调用关系图,并导出为GraphViz的Dot格式,例如doxygen,egypt,kprof,pvtrace,codeviz,cflow等,不胜枚举。需要用GUI编辑的话,再用GraphViz转成你想要的其他矢量图格式即可。
第一款:TrueCrypt
TrueCrypt可能很多人没用过,它是一个加密软件,能够对磁盘进行加密。还在担心自己电脑中的重要文件、私密档案被人查看。什么,你以为把文件设置了隐藏属性别人就看不到了?:) :)快来用TrueCrypt ,你必定会爱上它的。
特点:对某一磁盘分区进行加密,开启计算机后,如果你没有打开TrueCrypt 这个软件,这个被加密的分区是不会被显示出来的。打开TrueCrypt ,输入密码后,你就能在”我的电脑“里看到那个被加密的分区了。
第二款:Soureinsight
Soureinsight号称源代码阅读神奇,应该是阅读源代码最方便的软件,至今没有找到其替代产品。
特点:方便阅读项目代码,批量搜索,快捷查询函数调用关系等等。
第三款:Sublime
Sublime号称是史上最性感的编辑器。如果你用过sublime后,估计你就很难再爱上其他编辑软件了。
特点:性感的编辑器,插件丰富,界面清爽。
第四款:Mindmanager
思维导图,据说是每个产品经理必备的软件。如果你阅读大型源代码,使用思维导图跟踪调用流程,绘制软件框架将会非常方便。
特点:没什么好说的,用过的都说好!
第五款:MarkdownPad
MarkdownPad是windows上最好用的Markdown编辑器。有了这货,你可以像写word文档一样写html页面,也是广大博客主的最爱!当然,在mac上有很多高大上的Markdown编辑器。
特点:windows上最好用的Markdown编辑器。
第六款:Beyond compare
Beyond compare是一款文件比较工具,能够比较文件夹或者单个文件。例如,你想比较两个版本的软件源代码在哪些地方有修改,用它就对了。
特点:快捷比对文件或文件夹的不同之处。
第七款:Vim
Vim是Linux上神一样的编辑器,插件丰富,通过配置后,就是一个无比强大的IDE。
特点:Linux上主流编辑器,插件丰富,功能强大。
第八款:Wireshark
Wireshark是广大黑客、网络攻城狮的最爱,极大的方便了我们抓取、分析网络数据包。包括:ARP、TCP、UDP、>
1TraceView1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等 2)方法:a)在程序代码中加入追踪开关import androidosDebug;……androidosDebugstartMethodTracing(“/data/tmp/test”);// 先建/data/tmp目录……// 被追踪的程序段androidosDebugstopMethodTracing();b)编译,运行后,设备端生成/data/tmp/testtrace文件c)把trace文件复制到PC端$ adb pull /data/tmp/testtrace /d)使用android自带工具分析trace文件$ANDROID_SRC/out/host/linux-x86/bin/traceview testtrace此时可看到各个函数被调用的次数CPU占用率等信息e)使用android自带工具分析生成调用关系类图$ apt-get install graphviz# 安装相关软件$ANDROID_SRC/out/host/linux-x86/bin/dmtracedump -g testpng testtrace此时目录下生成类图testpng 3)注意trace文件生成与libdvm模块DEBUG版本相冲突,所以此方法只适用于对非DEBUG版本模拟器的调试,否则在分析trace文件时会报错2HProf (Heap Profile) 1)功能:用于java层面的内存分析,显示详细的内存占用信息,指出可疑的内存泄漏对象 2)方法:a)在代码中加入dump动作import androidosDebug;import javaioIOException;……try {androidosDebugdumpHprofData(“/data/tmp/inputhprof”); // 先建/data/tmp目录} catch (IOException ioe) {}b)把hprof文件复制到PC端$ adb pull /data/tmp/inputhprof /c)使用命令hprof-conv把hprof转成MAT识别的标准的hprof$ $ANDROID_SRC/out/host/linux-x86/bin/hprof-conv inputhprof outputhprofd)使用MAT工具看hprof信息下载MAT工具:/mat/downloadsphp用工具打开outputhprof 3)注意:此工具只能显示java层面的,而不能显示C层的内存占用信息3SamplingProfile (android 20上版本使用) 1)功能每隔N毫秒对当前正在运行的函数取样,并输出到log中 2)在代码中加入取样设定import dalviksystemSamplingProfiler……SamplingProfile sp = SamplingProfilergetInstance();spstart(n);// n为设定每秒采样次数splogSnapshot(spsnapshot());……spshutDown();它会启一个线程监测,在logcat中打印信息4用发系统信号的方式取当前堆栈情况和内存信息 1)原理dalvik虚拟机对SIGQUIT和SIGUSR1信号进行处理(dalvik/vm/SignalCatcherc),分别完成取当前堆栈和取当前内存情况的功能 2)用法a)$ chmod 777 /data/anr -R# 把anr目录权限设为可写$ rm /data/anr/tracestxt# 删除之前的trace信息$ ps # 找到进程号$ kill -3 进程号 # 发送SIGQUIT信号给该进程,此时生成trace信息$ cat /data/anr/tracestxt功能实现:遍历thread list(dalvik/vm/Threadc:dvmDumpAllThreadEx()),并打印当前函数调用关系(dalvik/vm/interp/Stackc:dumpFrames())b)$ chmod 777 /data/misc -R$ ps # 找到进程号$ kill -10 进程号 # 发送SIGQUIT信事信号给该进程,此时生成hprof信息$ ls /data/misc/hprof此时生成hprf文件,如何使用此文件,见第二部分(HProf)注意:hprof文件都很大,注意用完马上删除,以免占满存储器5logcat及原理 1)androidutilLog利用println的标准java输出词句,并加前缀I/V/D… 2)dalvik利用管道加线程的方式,先利用dup2把stdout和stderr重定向到管理中(vm/StdioConverterc:dvmstdioConverterStartup),然后再启动一个线程从管道另一端读出内容(dalvik/vm/StdioConverterc:stdioconverterThreadSt art()),使用LOG公共工具(system/core/liblog/logd_writec: __android_log_print())输出到/dev/log/中去 3)logcat通过加不同参数看/dev/log/下的不同输入信息# logcat -b main显示主缓冲区中的信息# logcat -b radio显示无线缓冲区中的信息# logcat -b events显示事件缓冲区中的信息6jdwp(java debug wire protocol)及原理 1)虚拟机(设备端)在启动时加载了Agent JDWP 从而具备了调试功能。在调试器端(PC端)通过JDWP协议与设备连接,通过发送命令来获取的状态和控制Java程序的执行。JDWP 是通过命令(command)和回复(reply)进行通信的。 2)JDK 中调试工具 jdb 就是一个调试器,DDMS也提供调试器与设备相连。 3)dalvik为JDWP提供了两种连接方式:tcp方式和adb方式,tcp方式可以手工指定端口,adb方式自动设定为8700端口,通常使用DDMS调试就是通过adb方式7monkey 1)monkey是一个android自带的命令行工具。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。 2)方法在设备端打开setting界面$ adb shell # monkey -p comandroidsettings -v 500此时可以看到界面不断被切换8其它小工具 具体见androidosDebug中提供的工具 1)取毫微秒级的时间,用于计算时间threadCpuTimeNanos() 2)统计两点间的内存分配情况startAllocCounting()stopAllocCounting()getGlobalAllocCount()get… 3)打印当前已load的classgetLoadedClassCount()printLoadedClasses()它需要打开NDEBUG功能才能打开system/core/中Log功能9打印debug信息$ adb bugreport
CodeViz是《Understanding The Linux Virtual Memory Manager》(at Amazon,下载地址在页尾)的作者 Mel Gorman写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有 egypt、ncc)。其基本原理是给 GCC 打个补丁,让它在编译时每个源文件时 dump 出其中函数的 call graph,然后用 Perl 脚本收集并整理调用关系,转交给Graphviz绘制图形。
CodeViz
原本是作者用来分析 Linux virtual memory 的源码时写的一个小工具,现在已经基本支持 C++ 语言,最新的 109
版能在 Windows + Cygwin 下顺利地编译使用:)。需要注意的是:1) 下载 GCC 341 的源码 gcc-341targz 放到 codeviz-109/compilers,2) 安装 patch 程序(属于Utils类),3) 从 >
Graphviz的是AT&T Labs Research开发的图形绘制工具软件。
可以使用python生成它的数据格式,再调用 Graphviz 单元生成图。
pip install pygraphviz# 安装后参考相关文档学习
自动生成流程图
基于Python和Graphviz开发的,能将源代码转化为流程图的工具:pycallgraph 可以帮到你;
跟着参考文章 *** 作,亲测有效;
参考文章:Python 流程图 — 一键转化代码为流程图
以上就是关于画关系图整理程序里面的函数调用关系,用什么软件比较方便全部的内容,包括:画关系图整理程序里面的函数调用关系,用什么软件比较方便、作为程序员的你,常用的工具软件有哪些、如何用MAT分析Android程序的内存泄露等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)