From owner-freebsd-hackers@FreeBSD.ORG Tue Mar 2 22:43:06 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 037EC16A4CE; Tue, 2 Mar 2004 22:43:06 -0800 (PST) Received: from relay.mortal.ru (unknown [62.16.86.250]) by mx1.FreeBSD.org (Postfix) with ESMTP id CB48A43D31; Tue, 2 Mar 2004 22:43:04 -0800 (PST) (envelope-from zevlg@yandex.ru) Received: from us.dmz.local (wus000.dmz.local [10.32.1.6]) by relay.mortal.ru (8.11.6/8.11.6) with ESMTP id i236h2J13901; Wed, 3 Mar 2004 09:43:02 +0300 Received: from us.dmz.local (localhost.dmz.local [127.0.0.1]) by us.dmz.local (8.12.3/8.12.3) with ESMTP id i236l9xt088506; Wed, 3 Mar 2004 09:47:09 +0300 (MSK) (envelope-from zevlg@yandex.ru) Received: (from wtc05@localhost) by us.dmz.local (8.12.3/8.12.3/Submit) id i236l8Aa088505; Wed, 3 Mar 2004 09:47:08 +0300 (MSK) X-Authentication-Warning: us.dmz.local: wtc05 set sender to zevlg@yandex.ru using -f To: Robert Watson References: From: Zajcev Evgeny Date: Wed, 03 Mar 2004 09:47:08 +0300 In-Reply-To: (Robert Watson's message of "Tue, 2 Mar 2004 22:18:31 -0500 (EST)") Message-ID: <82brneh1g3.fsf@us.dmz.local> User-Agent: Gnus/5.1002 (Gnus v5.10.2) XEmacs/21.5 (celery, berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii cc: hackers@freebsd.org Subject: Re: Looking for static analysis tool to generate call graphs X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Mar 2004 06:43:06 -0000 Robert Watson writes: > Well, using a scary combination of grep, awk, a long list of "omit this" > regexp's, and prcc from cflow, I got the following: > > http://www.watson.org/~robert/freebsd/20040302-sockets.ps Actually it looks kind a mess. Maybe use dot's clustering or ranking to organize callgraph a little? like this: Clustering output: digraph cg { a -> b; b->c; a->c; c->d; a->d; subgraph "cluster_one.c" { label="one.c"; a; b;}; subgraph "cluster_two.c" { label="two.c"; c; d;} } Layered output: digraph cg { a -> b; b->c; a->c; c->d; a->d; { rank = same; a; c; } { rank = same; b; d; } } So soXXX functions may be with same rank, also some high level functions such as `accept', `listen', `send', etc may have same rank, so callgraph will look like subroutine was designed on paper. Unfortunately there is no way in dot to use clustering and ranking for same node :(. -- lg