Version 5 (modified by jazz, 13 years ago) (diff) |
---|
callgraph : 了解程式流程
- (2011-03-31)
- C/C++
- Rex 在 CallGraphviz – call graph visualzer based on csope, graphviz and xdot 一文中介紹了許多不同的 callgraph 產生方式。
- 搭配維基百科 Call_graph的軟體簡介,大概整理如下:
- CodeViz - 缺點:必須 patch GCC 然後用 Perl 來產生圖形
- ncc - 目標是取代 cflow 跟 cscope,jserv 有介紹過 - 缺點:相依 GCC 環境版本
- cflow - 老字號 GNU 的流程分析工具 - Fred 有寫過用在分析 Android Dalvik VM 的示範 - 產生文字輸出
- cscope/global - Interactively examine a C program source - 我想 cscope 要強調的是 interactive 互動式除錯,而且照 Rex 的講法,可以只針對某個函數當進入點,而不是整個程式原始碼。
- 有 Debian 套件 cscope 跟 global
- CCTree - C Call-Tree Explorer - Cscope based source-code browser, code flow analysis tool - 給 VIM 用的 cscope plugin
- seascope - A pyQt GUI front-end for cscope - pyQt 寫的 cscope 圖形介面
- kscope - A source-code browsing, analysis and editing environment for large C projects. - KDE 版本的 cscope 圖形介面 - 有 Debian 套件 kscope
- KCachegrind - Profiling Visualization - 這個工具是搭配 Valgrind 這個 Profiler 可以在 runtime 產生 callgrah
- Gprof2Dot - 也是透過 profiler 產生的輸出來作視覺化動作,最初是支援 gprof 現在已經支援更多不同 profiler 了。
- egypt - 用 Perl 寫的
- Python
- pycallgraph - Python Call Graph
- Bash
- 我一直想找的是 Bash 的遞迴式 callgraph 產生器,雖然 Bash 可以加入 -X 參數來做 runtime 除錯,不過還沒有找到可以查出多層該怎麼追。
- bashdb - BASH Debugger - 可以用類似 GDB 的指令來 DEBUG Bash
- shprof - a line profiler for shell scripts
- 這邊有一招是蠻好玩的,居然只要設定 PS4 環境變數就可以秀出每個呼叫的開始時間。(這算是 bash 的簡易版 profiler 嘛?) <參考討論> time profiling a linux command or script
Least invasive you may want to play with some variant of... set -x PS4='$( date ): ' sleep 1 sleep 3 sleep 2 exit 0 which produces timestamps in front of the commands... Mon Mar 17 02:39:35 CET 2008: PS4='$( date ): ' Mon Mar 17 02:39:35 CET 2008: sleep 1 Mon Mar 17 02:39:36 CET 2008: sleep 3 Mon Mar 17 02:39:39 CET 2008: sleep 2 Mon Mar 17 02:39:41 CET 2008: exit 0
Profiling / Profiler : 了解程式特性(CPU、記憶體、I/O)
- (2010-06-07)
- Linux Profiling tools and techniques (2011-04-27)
- Java
- Eclipse Test & Performance Tools Platform Project (TPTP) - Eclipse 的 Profiling 工具
- An introduction to profiling Java applications
- Overview of the Profiling Tool - Eclipse 說明文件有蠻詳細的 Monitoring and profiling applications 觀念與操作步驟介紹
- Netbean Java Profiler - CPU, memory and threads profiling - 搭配 Netbean
- JProfiler - 維基百科 - 搭配 Eclipse
- jmp - Java Memory Profiler (主攻記憶體的 Profiler)
- Debian 套件 jmp - Profiler for Java to trace object and method timings (舊的)
- tijmp - Debian 套件 tijmp - Profiler for Java to trace object and method timings (比較新)
- Runtime Profiler
- http://profiler4j.sourceforge.net/ - 看起來不錯,不過大約 2006 之後就比較少更新了。
- Monitoring - JMX
- JMeasurement - 支援 JMX 的 Profiler
- xdprof - a cross-platform tool that captures and analyzes stack traces sent at a fixed interval from Java Virtual Machines in a distributed system - 因為是針對分散式系統的 profiler,所以有可能可以用在 Hadoop 效能分析上
- Eclipse Test & Performance Tools Platform Project (TPTP) - Eclipse 的 Profiling 工具
- C - check slides of "Advanced C Programming - Profiling"
- gprof - 屬於 GNU binutils 的一部分 - Debian 套件 - binutils
- gprof 看 performance 分析…
- gprof - linux program profiling tool
- kprof - a KDE3 visual tool to help analyze profiling results - Debian 套件 kprof
- gprof2dot - 把 gprof log 轉成 graphviz 的 dot 格式,就可以畫出圖形了
- gcov - 統計 code coverage 的工具,可以在 gcc 編譯時加參數來達成。
Use GCC flags -fprofile-arcs: collect info about jumps -ftest-coverage: collect info about code coverage
- mtrace() 函數 - 檢查記憶體溢出(memory leakage)問題 (2010-03-04)
- valgrind - Debian 套件 - valgrind - (2010-03-04)
- 檢查程式記憶體的小工具-valgrind
- Detecting C/C++ memory leaks with valgrind
- 在 slides of "Advanced C Programming - Profiling" 投影片介紹中,有三個主要工具 memcheck、cachegrind、callgrind
- cachegrind - 模擬 L1/L2 Cache, 找出 cache misses
- Debian 套件 kcachegrind - visualisation tool for valgrind profiling output - 可以用視覺化圖形介面顯示 cachegrind 的輸出
- Debian 套件 kcachegrind-converters - format converters for KCachegrind profiling visualisation tool
- callgrind - 紀錄函數呼叫圖(call graph)
- cachegrind - 模擬 L1/L2 Cache, 找出 cache misses
- iogrind - I/O profiling tool - 用來顯示應用程式的 I/O Profile
- oprofile - a system-wide profiler for Linux systems, capable of profiling all running code at low overhead.
- 有 Debian 套件 - oprofile
~# opcontrol --init # to load module and daemon ~# opcontrol -s # to start sampling ~# opcontrol -t # to stop sampling ~# opcontrol --dump # ?ushes the event log ~# opcontrol --list-events # shows available performance counters ~# opreport -l prog-name # gives breakdown of samples per function in prog-name
- Debian 套件 oprofile-gui - system-wide profiler for Linux systems (GUI components)
- 使用 gprof 和 oprofile 查找性能瓶頸
- 有 Debian 套件 - oprofile
- qprof - Profiling utilities for Linux
- sysprof - Debian 套件 sysprof - (2010-03-04)
- 2005-09 sysprof - System-wide Linux Profiler - jserv 推薦
- gprof - 屬於 GNU binutils 的一部分 - Debian 套件 - binutils
- Perl
- Devel::Profile - Debian 套件 - libdevel-profile-perl - a Perl code profiler
- Devel::Cover - Code coverage metrics for Perl - Debian 套件 libdevel-cover-perl
- PHP - references for armorize
- Bash
- 看樣子,bash 編譯時如果加入 --enable-profiling 就可以透過 gprof 進行 profiling。至於怎麼用,暫且還沒找到範例。
- MPI
- Debian 套件 tau - Tuning and Analysis Utilities - base profiling toolkit
- TAU is a profiling toolkit specially made for parallel computing (multi-thread, multi-process, MPI, PVM). - 針對平行程式的 Profiler 不過套件裡面包的只有 pthread 的支援,因此無法做 MPI, PVM 分析。
- Debian 套件 tau-examples - Tuning and Analysis Utilities - examples - 一些 TAU 的範例
- Debian 套件 python-tau - Tuning and Analysis Utilities - support for python bindings
- Debian 套件 tau - Tuning and Analysis Utilities - base profiling toolkit
- Python
- Debian 套件 python-profiler - deterministic profiling of any Python programs
- Ruby
- Debian 套件 ruby-prof - A fast code profiler for Ruby
- C# / Mono
- mono-profiler - Mono profiler - 有 Debian 套件 mono-profiler
Systemtap / DTrace / ftrace
- (2010-03-04)
- Tracing: no shortage of options - Linux 追查 User Space / Kernel Space 的 trace 工具一覽
- SystemTap
- 官方網站 - http://sourceware.org/systemtap/
- Debian 套件 - systemtap
- IBM Redbook - SystemTap: Instrumenting the Linux Kernel for Analyzing Performance and Functional Problems - 先前有看過一小段,目前暫時還沒有需要用到這種工具的時機。
- FudCon Success – Systemtap meets Python
- Adding User Space Probing to an Application (heapsort example)
- utrace - a new kernel-side API for kernel modules
- Introducing utrace
- 看起來是 SystemTap 用在追蹤 User Space 的工具,但核心必須支援。
- DTrace
- 3/3 聽完 Sun 的 Open Solaris 簡介,對於 DTrace 興起一些好奇,看了一些討論發現 DTrace 是比較友善,但要學 D 語言,而 SystemTap 比較合適追 Kernel Space 的錯誤,User Space 必須靠 utrace 的支援。當然現階段最麻煩的還是授權,跟 ZFS, Lustre 一樣,DTrace 之所以沒有移植到 Linux 都是因為授權是 CDDL 而非 GPL。唉...自由軟體的授權真是一件複雜的事情啊!!
- 2010-07-25 - Observing and Optimizing your Application with DTrace - OSCON 2010 dTrace Tutorial 的實作網站,共設計了 17 個練習。Cool~
- 免費的私家偵探-跟著 DTrace 探索 Process
- DTrace Topics Intro
- 不太合乎授權的 DTrace Porting for Linux
- 2008-06 - DTrace on Linux
- 2007-07 - End-to-End Tracing of Ajax/Java Applications Using DTrace
- 2007-03 - Adding Dtrace Probes to Mozilla
- 2006-09 - DTrace meets JavaScript
- LTTng
- allow tracing of the kernel, of userspace, trace viewing and analysis and trace streaming.
- SystemTap / DTrace / LTTng 比較一覽表
- Ftrace
- Documentation/ftrace.txt @ Kernel 2.6.29
- A look at ftrace
- strace - 還算常用的 DEBUG 工具
- 這篇提到還有 ltrace, truss 兩種工具
- strace (1): lists all system calls used - Debian 套件 - strace
- ltrace (1): lists all shared library calls - Debian 套件 - ltrace
- truss (1): trace system calls and signals -
- 【註】出於安全方面的考慮,在 FreeBSD 5 之後系統預設已經不再自動掛載 proc 檔案系統,因此,要想使用 truss 或 strace 跟蹤程序,你必須手工掛載 proc 檔案系統:mount -t procfs proc /proc;ltrace 不需要使用 procfs。
- 較少聽過的:
- latrace - LD_AUDIT 2.4+ libc frontend
- ptrace() - process trace
- 2008-03 : jserv - 以 ptrace 系統呼叫來追蹤/修改行程
- 2002-11 : Playing with ptrace, Part I
- 2002-12 : Playing with ptrace, Part II
Code Peer Review
Perl Debugger
- [專案] libcrypt-ssleay-perl - 讓 Perl 的 LWP 支援 HTTPS 協定所需的套件。
- [備忘] perldebtut - Perl debugging tutorial 官方文件
- 由於以往寫 Perl 的程式都只會用 print 把變數印出來,好觀察到底判斷式寫得正不正確,正規表示法所擷取出來的內容到底是不是自己想要的。不過今天花了一整天 Debug 某一段程式邏輯,輸入的資料量又不少,有時候還真的蠻想要有 step trace 的功能。寫 C 可以用 gdb 作 debugger,那 Perl 呢?? 答案是加一個 -d 參數下去跑。
- The Perl Debugger (Programming Perl 3rd Edition)
- Visual Perl - ActiveState ends development of dynamic language plug-ins for Microsoft Visual Studio
- ddd 可以對 perl 程式除錯, 用 ddd --perl 起動 ddd 來對 perl 程式除錯,或者在 preference 設 perl 模式