在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux下C應(yīng)用程序開發(fā)

            Linux下C應(yīng)用程序開發(fā)

            作者: 時(shí)間:2011-05-20 來源:網(wǎng)絡(luò) 收藏
            另外的 C 編程工具
              xxgdb
              xxgdb 是 gdb 的一個(gè)基于 X Window 系統(tǒng)的圖形界面. xxgdb 包括了命令行版的 gdb 上的所有特性. xxgdb 使你能通過按按鈕來執(zhí)行常用的命令. 設(shè)置了斷點(diǎn)的地方也用圖形來顯示.
            你能在一個(gè) Xterm 窗口里鍵入下面的命令來運(yùn)行它:
              xxgdb
              你能用 gdb 里任何有效的命令行選項(xiàng)來初始化 xxgdb . 此外 xxgdb 也有一些特有的命令行選項(xiàng), 表 27.2 列出了這些選項(xiàng).
              表 27.2. xxgdb 命令行選項(xiàng).
              選 項(xiàng) 描 述
              db_name 指定所用調(diào)試器的名字, 缺省是 gdb.
              db_prompt 指定調(diào)試器提示符, 缺省為 gdb.
              gdbinit 指定初始化 gdb 的命令文件的文件名, 缺省為 .gdbinit.
              nx 告訴 xxgdb 不執(zhí)行 .gdbinit 文件.
              bigicon 使用大圖標(biāo).
              calls
              你可以在 sunsite.unc.edu FTP 站點(diǎn)用下面的路徑:
              /pub//devel/lang/c/calls.tar.Z
              來取得 calls , 一些舊版本的 CD-ROM 發(fā)行版里也附帶有. 因?yàn)樗且粋€(gè)有用的工具, 我們在這里也介紹一下. 如果你覺得有用的話, 從 BBS, FTP, 或另一張CD-ROM 上弄一個(gè)拷貝. calls 調(diào)用 GCC 的預(yù)處理器來處理給出的源程序文件, 然后輸出這些文件的里的函數(shù)調(diào)用樹圖.
              注意: 在你的系統(tǒng)上安裝 calls , 以超級(jí)用戶身份登錄后執(zhí)行下面的步驟: 1. 解壓和 untar   文件. 2. cd 進(jìn)入 calls untar 后建立的子目錄. 3. 把名叫 calls 的文件移動(dòng)到 /usr/bin 目錄. 4. 把名叫 calls.1 的文件移動(dòng)到目錄 /usr/man/man1 . 5. 刪除 /tmp/calls 目錄. 這些步驟將把 calls 程序和它的指南頁安裝載你的系統(tǒng)上.
            ------------------------------------------------------------------------------
            --
              當(dāng) calls 打印出調(diào)用跟蹤結(jié)果時(shí), 它在函數(shù)后面用中括號(hào)給出了函數(shù)所在文件的文件名:
            main [hello.c]
              如果函數(shù)并不是向 calls 給出的文件里的, calls 不知道所調(diào)用的函數(shù)來自哪里, 則只顯示函數(shù)的名字:
              printf
              calls 不對遞歸和靜態(tài)函數(shù)輸出. 遞歸函數(shù)顯示成下面的樣子:
              fact recursive in factorial.c >;>;>;
              靜態(tài)函數(shù)象這樣顯示:
              total [static in calculate.c]
              作為一個(gè)例子, 假設(shè)用 calls 處理下面的程序:
              #include stdio.h>;
              static void my_print (char *);
              static void my_print2 (char *);
              main ()
              {
              char my_string[] = hello world!;
              my_print (my_string);
              my_print2 (my_string);
              my_print (my_string);
              }
              void count_sum()
              {
              int i,sum=0;
              for(i=0; i1000000; i++)
              sum += i;
              }
              void my_print (char *string)
              {
              count_sum();
              (The string is %s , string);
              }
              void my_print2 (char *string)
              {
              char *string2;
              int size, i,sum =0;
              printf (The string printed backward is %s , string2);
              }
              將產(chǎn)生如下的輸出:
              1 __underflow [hello.c]
              2 main
              3 my_print [hello.c]
              4 count_sum [hello.c]
              5 printf
              6 my_print2 [hello.c]
              7 count_sum
              8 strlen
              9 malloc
              10 printf
              calls 有很多命令行選項(xiàng)來設(shè)置不同的輸出格式, 有關(guān)這些選項(xiàng)的更多信息請參考 calls 的指南頁. 方法是在命令行上鍵入 calls -h .
              calltree
              calltree與calls類似,初了輸出函數(shù)調(diào)用樹圖外,還有其它詳細(xì)的信息??梢詮膕unsite.unc.edu FTP 站點(diǎn)用下面的路徑
              :/pub//devel/lang/c/calltree.tar.gz得到calltree.
              cproto
              cproto 讀入 C 源程序文件并自動(dòng)為每個(gè)函數(shù)產(chǎn)生原型申明. 用 cproto 可以在寫程序時(shí)為你節(jié)省大量用來定義函數(shù)原型的時(shí)間.
              如果你讓 cproto 處理下面的代碼(cproto hello.c):
              #include stdio.h>;
              static void my_print (char *);
              static void my_print2 (char *);
              main ()
              {
              char my_string[] = hello world!;
              my_print (my_string);
              my_print2 (my_string);
              }
              void my_print (char *string)
              {
              printf (The string is %s , string);
              }
              void my_print2 (char *string)
              {
              char *string2;
              int size, i;
              size = strlen (string);
              string2 = (char *) malloc (size + 1);
              for (i = 0; i size; i++)
              string2[size -1 - i] = string;
              string2[size] = '';
              printf (The string printed backward is %s , string2);
              }
              你將得到下面的輸出:
              /* hello.c */
              int main(void);
              int my_print(char *string);
              int my_print2(char *string);
              這個(gè)輸出可以重定向到一個(gè)定義函數(shù)原型的包含文件里.
              indent
              indent 實(shí)用程序是 Linux 里包含的另一個(gè)編程實(shí)用工具. 這個(gè)工具簡單的說就為你的代碼產(chǎn)生美觀的縮進(jìn)的格式. indent 也有很多選項(xiàng)來指定如何格式化你的源代碼.這些選項(xiàng)的更多信息請看indent 的指南頁, 在命令行上鍵入 indent -h .
              下面的例子是 indent 的缺省輸出:
              運(yùn)行 indent 以前的 C 代碼:
              #include stdio.h>;
              static void my_print (char *);
              static void my_print2 (char *);
              main ()
              {
              char my_string[] = hello world!;
              my_print (my_string);
              my_print2 (my_string);
              }
              void my_print (char *string)
              {
              printf (The string is %s , string);
              }
              void my_print2 (char *string)
              {
              char *string2; int size, i;
              size = strlen (string);
              string2 = (char *) malloc (size + 1);
              for (i = 0; i size; i++) string2[size -1 - i] = string;
              string2[size] = '';
              printf (The string printed backward is %s , string2);
              }
              運(yùn)行 indent 后的 C 代碼:
              #include stdio.h>;
              static void my_print (char *);
              static void my_print2 (char *);
              main ()
              {
              char my_string[] = hello world!;
              my_print (my_string);
              my_print2 (my_string);
              }
              void
              my_print (char *string)
              {
              printf (The string is %s , string);
              }
              void
              my_print2 (char *string)
              {
              char *string2;
              int size, i;
              size = strlen (string);
              string2 = (char *) malloc (size + 1);
              for (i = 0; i size; i++)
              string2[size - 1 - i] = string;
              string2[size] = '';
              printf (The string printed backward is %s , string2);
              }
              indent 并不改變代碼的實(shí)質(zhì)內(nèi)容, 而只是改變代碼的外觀. 使它變得更可讀, 這永遠(yuǎn)是一件好事.
              gprof
              gprof 是安裝在你的 Linux 系統(tǒng)的 /usr/bin 目錄下的一個(gè)程序. 它使你能剖析你的程序從而知道程序的哪一個(gè)部分在執(zhí)行時(shí)最費(fèi)時(shí)間.
              gprof 將告訴你程序里每個(gè)函數(shù)被調(diào)用的次數(shù)和每個(gè)函數(shù)執(zhí)行時(shí)所占時(shí)間的百分比. 你如果想提高你的程序性能的話這些信息非常有用.
              為了在你的程序上使用 gprof, 你必須在編譯程序時(shí)加上 -pg 選項(xiàng). 這將使程序在每次執(zhí)行時(shí)產(chǎn)生一個(gè)叫 gmon.out 的文件. gprof 用這個(gè)文件產(chǎn)生剖析信息.
              在你運(yùn)行了你的程序并產(chǎn)生了 gmon.out 文件后你能用下面的命令獲得剖析信息:
              gprof program_name>;
              參數(shù) program_name 是產(chǎn)生 gmon.out 文件的程序的名字.
              為了說明問題,在程序中增加了函數(shù)count_sum()以消耗CPU時(shí)間,程序如下
              #include stdio.h>;
              static void my_print (char *);
              static void my_print2 (char *);
              main ()
              {
              char my_string[] = hello world!;
              my_print (my_string);
              my_print2 (my_string);
              my_print (my_string);
              }
              void count_sum()
              {
              int i,sum=0;
              for(i=0; i1000000; i++)
              sum += i;
              }
              void my_print (char *string)
              {
              count_sum();
              printf (The string is %s , string);
              }
              void my_print2 (char *string)
              {
              char *string2;
              int size, i,sum =0;
              count_sum();
              size = strlen (string);
              string2 = (char *) malloc (size + 1);
              for (i = 0; i size; i++) string2[size -1 - i] = string;
              string2[size] = '';
              for(i=0; i5000000; i++)
              sum += i;
              printf (The string printed backward is %s , string2);
              }
              $ gcc -pg -o hello hello.c
              $ ./hello
              $ gprof hello | more
              將產(chǎn)生以下的輸出
              Flat profile:
              Each sample counts as 0.01 seconds.
              % cumulative self self total
              time seconds seconds calls us/call us/call name
              69.23 0.09 0.09 1 90000.00 103333.33 my_print2
              30.77 0.13 0.04 3 13333.33 13333.33 count_sum
              0.00 0.13 0.00 2 0.00 13333.33 my_print
              % 執(zhí)行此函數(shù)所占用的時(shí)間占程序總
              time 執(zhí)行時(shí)間的百分比
              cumulative 累計(jì)秒數(shù) 執(zhí)行此函數(shù)花費(fèi)的時(shí)間
              seconds (包括此函數(shù)調(diào)用其它函數(shù)花費(fèi)的時(shí)間)
              self 執(zhí)行此函數(shù)花費(fèi)的時(shí)間
              seconds (調(diào)用其它函數(shù)花費(fèi)的時(shí)間不計(jì)算在內(nèi))
              calls 調(diào)用次數(shù)
              self 每此執(zhí)行此函數(shù)花費(fèi)的微秒時(shí)間
              us/call
              total 每此執(zhí)行此函數(shù)加上它調(diào)用其它函數(shù)
              us/call 花費(fèi)的微秒時(shí)間
              name 函數(shù)名
              由以上數(shù)據(jù)可以看出,執(zhí)行my_print()函數(shù)本身沒花費(fèi)什么時(shí)間,但是它又調(diào)用了
            count_sum()函數(shù),所以累計(jì)秒數(shù)為0.13.
              技巧: gprof 產(chǎn)生的剖析數(shù)據(jù)很大, 如果你想檢查這些數(shù)據(jù)的話最好把輸出重定向到一個(gè)文件里. linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            linux相關(guān)文章:linux教程



            上一頁 1 2 3 下一頁

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉