• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            tqsheng

            go.....
            隨筆 - 366, 文章 - 18, 評(píng)論 - 101, 引用 - 0
            數(shù)據(jù)加載中……

            介紹一個(gè)linux下生成C代碼調(diào)用樹(shù)的好工具calltree

            平時(shí)用vim+cscope+ctags看程序還不錯(cuò),但跳來(lái)跳去還是不太直觀,如果能將C代碼的調(diào)用生成調(diào)用樹(shù)就再好不過(guò)了,果然,偶找到了一款不錯(cuò)的工具calltree,有了這個(gè)工具,可以說(shuō)宏觀微宏一起把握了,拋媚眼

            先看一下用它生成的函數(shù)調(diào)用圖:

            源碼是nbtscan小工具的代碼.

            ljt@debian:~/source/nbtscan-1.5.1$ calltree -gb -np -m *.c

            main [nbtscan.c:289]:
            | FD_ISSET
            | FD_SET
            | FD_ZERO
            | atoi
            | bind
            | bzero
            | d_print_hostinfo [nbtscan.c:93]
            | | inet_ntoa
            | | printf
            | | strncpy
            | delete_list [list.c:29]
            | | free
            | err_die
            | err_print
            | exit
            | feof
            | fgets
            | fopen
            | fprintf
            | free
            | getopt
            | gettimeofday
            | htons
            | in_list [list.c:101]
            | | compare [list.c:47]
            | | new_list_item [list.c:17]
            | | | err_die
            | | | malloc
            | inet_aton
            | inet_ntoa
            | insert [list.c:55]
            | | compare [list.c:47]
            | | free
            | | new_list_item [list.c:17]
            | | | err_die
            | | | malloc
            | l_print_hostinfo [nbtscan.c:260]
            | | inet_ntoa
            | | printf
            | | strncpy
            | malloc
            | new_list [list.c:8]
            | | err_die
            | | malloc
            | next_address [range.c:72]
            | | htonl
            | | ntohl
            | ntohl
            | parse_response [statusq.c:147]
            | | bzero
            | | get16 [statusq.c:137]
            | | | memcpy
            | | | ntohs
            | | get32 [statusq.c:127]
            | | | memcpy
            | | | ntohl
            | | malloc
            | | memcpy
            | | strncpy
            | | typeof
            | print_banner [nbtscan.c:26]
            | | printf
            | print_header [nbtscan.c:87]
            | | printf
            | print_hostinfo [nbtscan.c:207]
            | | inet_ntoa
            | | printf
            | | strncpy
            | printf
            | recvfrom
            | select
            | send_query [statusq.c:93]
            | | bzero
            | | err_print
            | | gettimeofday
            | | htons
            | | inet_ntoa
            | | name_mangle [statusq.c:40]
            | | | HAVE_SNPRINTF
            | | | memset
            | | | snprintf
            | | | sprintf
            | | | strcmp
            | | | strlen
            | | | toupper
            | | sendto
            | | snprintf
            | set_range [nbtscan.c:80]
            | | is_ip [range.c:21]
            | | | inet_addr
            | | | ntohl
            | | is_range1 [range.c:36]
            | | | abs
            | | | atoi
            | | | err_die
            | | | free
            | | | inet_addr
            | | | malloc
            | | | ntohl
            | | | strchr
            | | | strcpy
            | | | strlen
            | | is_range2 [range.c:91]
            | | | atoi
            | | | err_die
            | | | free
            | | | inet_addr
            | | | malloc
            | | | ntohl
            | | | strchr
            | | | strcpy
            | | | strlen
            | sleep
            | snprintf
            | socket
            | strcmp
            | strdup
            | timerclear
            | timercmp
            | timersub
            | usage [nbtscan.c:32]
            | | exit
            | | printf
            | v_print_hostinfo [nbtscan.c:156]
            | | getnbservicename [statusq.c:370]
            | | | err_die
            | | | malloc
            | | | snprintf
            | | | strstr
            | | inet_ntoa
            | | printf
            | | strncpy

            還不錯(cuò)哦,能很直觀地顯示程序的架構(gòu)

            下面介紹一下各選項(xiàng):
            ljt@debian:~/source/nbtscan-1.5.1$ calltree -gb -np -m *.c

            -b 就是那個(gè)豎線了,很直觀地顯示縮進(jìn)層次。
            -g 打印內(nèi)部函數(shù)的所屬文件名及行號(hào),外部函數(shù)所屬文件名和行號(hào)也是可打印的,詳man

            -np 不要調(diào)用c預(yù)處理器,這樣打印出的界面不會(huì)很雜亂,但也可能會(huì)產(chǎn)生錯(cuò)誤哦,如果我們只看
            函數(shù)的調(diào)用關(guān)系的話,不會(huì)有大問(wèn)題。
            -m 告訴程序從main開(kāi)始

            還有一個(gè)重要的選項(xiàng)是 listfunction ,縮寫(xiě)是lf,用來(lái)只打印某個(gè)函數(shù)中的調(diào)用,用法是:
            $calltree -gb -np lf=send_query *.c

            send_query [statusq.c:93]:
            | bzero
            | err_print
            | gettimeofday
            | htons
            | inet_ntoa
            | name_mangle [statusq.c:40]
            | | HAVE_SNPRINTF
            | | memset
            | | snprintf
            | | sprintf
            | | strcmp
            | | strlen
            | | toupper
            | sendto
            | snprintf

            還有幾個(gè)不太常用的就不介紹了,細(xì)節(jié)大家還是看man吧,另外說(shuō)明一點(diǎn)的是,安裝的時(shí)候它默認(rèn)是安裝到"/opt/schily/"目錄下,下面有bin, man, include等幾個(gè)目錄,你可以設(shè)置環(huán)境變量,或者干脆把它拷貝到/usr里相應(yīng)的目錄下,或者修改Makefile啦


            下載地址:

            ftp://ftp.berlios.de/pub/calltree/calltree-2.3.tar.bz2

            posted on 2012-04-05 22:41 tqsheng 閱讀(1301) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            大美女久久久久久j久久| 久久免费的精品国产V∧| 人妻中文久久久久| 中文国产成人精品久久不卡| 亚洲av日韩精品久久久久久a| 久久777国产线看观看精品| 久久久久国色AV免费观看| 97精品国产97久久久久久免费 | 国产精品亚洲综合久久 | 亚洲狠狠婷婷综合久久蜜芽 | 国产aⅴ激情无码久久| 精品久久777| 国产成人精品综合久久久| 精品久久久久久国产免费了| 久久精品国产清高在天天线| 久久久久久无码国产精品中文字幕| 久久伊人五月丁香狠狠色| 国产精品99久久久久久猫咪| 久久综合狠狠综合久久| 亚洲欧美精品一区久久中文字幕 | 国产精品99久久久久久人| 亚洲欧美日韩久久精品| 国产亚洲色婷婷久久99精品91| 中文字幕无码精品亚洲资源网久久| 久久国产视频99电影| 国内精品久久久久久野外| 久久亚洲中文字幕精品有坂深雪| 四虎国产精品免费久久| 久久久久亚洲av成人无码电影| 久久精品国产免费一区| 精品久久香蕉国产线看观看亚洲 | 精品一久久香蕉国产线看播放| 99热成人精品热久久669| 久久精品国产99久久无毒不卡| 久久AV高潮AV无码AV| 久久精品国产久精国产果冻传媒 | 国产成人99久久亚洲综合精品| 国产 亚洲 欧美 另类 久久| 99久久精品国产一区二区| 精品久久久无码中文字幕天天| 久久强奷乱码老熟女网站|