真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何全面分析FedoraGCC程序

本篇文章給大家分享的是有關(guān)如何全面分析Fedora GCC程序,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)服務(wù)項目包括寶山網(wǎng)站建設(shè)、寶山網(wǎng)站制作、寶山網(wǎng)頁制作以及寶山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,寶山網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到寶山省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

在向大家詳細(xì)介紹Fedora GCC之前,首先讓大家了解下Linux,然后全面介紹Fedora GCC。

1.命令:[root@localhost ~]# gcc -g http2.c -o http2
得到調(diào)試信息:
[root@localhost ~]# gcc -g http2.c -o http2
http2.c: 在函數(shù) ‘main’ 中:
http2.c:51: 警告:隱式聲明與內(nèi)建函數(shù) ‘bzero’ 不兼容
http2.c:61: 警告:傳遞參數(shù) 2 (屬于 ‘bind’)時在不兼容的指針類型間轉(zhuǎn)換
http2.c:81: 警告:傳遞參數(shù) 2 (屬于 ‘a(chǎn)ccept’)時在不兼容的指針類型間轉(zhuǎn)換
http2.c: 在函數(shù) ‘ParseHttpRequest’ 中:
http2.c:153: 警告:隱式聲明與內(nèi)建函數(shù) ‘strstr’ 不兼容
http2.c:153: 警告:隱式聲明與內(nèi)建函數(shù) ‘strlen’ 不兼容
http2.c:158: 警告:隱式聲明與內(nèi)建函數(shù) ‘memset’ 不兼容
http2.c:159: 警告:隱式聲明與內(nèi)建函數(shù) ‘memcpy’ 不兼容
http2.c: 在函數(shù) ‘do_proxy’ 中:
http2.c:315: 警告:隱式聲明與內(nèi)建函數(shù) ‘strcat’ 不兼容
http2.c:316: 警告:隱式聲明與內(nèi)建函數(shù) ‘strlen’ 不兼容
[root@localhost ~]# ./http2正在監(jiān)聽[root@localhost ~]#

2.為了更快速地發(fā)現(xiàn)錯誤所在,可以使用GDB進(jìn)行跟蹤調(diào)試,方法如下:
[root@localhost ~]# gdb http2
GNU gdb Red Hat Linux (6.5-15.fc6rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

當(dāng)GDB提示符出現(xiàn)的時候,表明GDB已經(jīng)做好準(zhǔn)備進(jìn)行調(diào)試了,現(xiàn)在可以通過run命令讓程序開始在GDB的監(jiān)控下運行:Starting program: /root/http2正在監(jiān)聽Program exited normally.

3.下面為搜到的信息,尚未實驗當(dāng)GDB提示符出現(xiàn)的時候,表明GDB已經(jīng)做好準(zhǔn)備進(jìn)行調(diào)試了,現(xiàn)在可以通過run命令讓程序開始在GDB的監(jiān)控下運行:
Starting program: /home/xiaowp/thesis/gcc/code/crash
Input an integer:10
Program received signal SIGSEGV, Segmentation fault.
0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6

仔細(xì)分析一下GDB給出的輸出結(jié)果不難看出,程序是由于段錯誤而導(dǎo)致異常中止的,說明內(nèi)存操作出了問題,具體發(fā)生問題的地方是在調(diào)用
_IO_vfscanf_internal ( )的時候。為了得到更加有價值的信息,可以使用GDB提供的回溯跟蹤命令backtrace,執(zhí)行結(jié)果
如下:
#0 0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6
#1 0xbffff0c0 in ?? ()
#2 0x4008e0ba in scanf () from /lib/libc.so.6
#3 0x08048393 in main () at crash.c:11
#4 0x40042917 in __libc_start_main () from /lib/libc.so.6

跳過輸出結(jié)果中的前面三行,從輸出結(jié)果的第四行中不難看出,GDB已經(jīng)將錯誤定位到crash.c中的第11行了?,F(xiàn)在仔細(xì)檢查一下:
frame 3 #3 0x08048393 in main () at crash.c:11 11 scanf("%d", input);

使用GDB提供的frame命令可以定位到發(fā)生錯誤的代碼段,該命令后面跟著的數(shù)值可以在backtrace命令輸出結(jié)果中的行首找到?,F(xiàn)在已經(jīng)發(fā)現(xiàn)錯
誤所在了,應(yīng)該將scanf("%d", input);改為scanf("%d", &input);完成后就可以退出GDB了,命令如下:

GDB的功能遠(yuǎn)遠(yuǎn)不止如此,它還可以單步跟蹤程序、檢查內(nèi)存變量和設(shè)置斷點等。調(diào)試時可能會需要用到編譯器產(chǎn)生的中間結(jié)果,這時可以使用-save-temps選項,讓Fedora GCC將預(yù)處理代碼、匯編代碼和目標(biāo)代碼都作為文件保存起來。如果想檢查生成的代碼是否能夠通過手工調(diào)整的辦法來提高執(zhí)行性能,在編譯過程中生成的中間文件將會很有幫助,具體情況如下:

# Fedora GCC -save-temps foo.c -o foo
# ls foo*
foo foo.c foo.i foo.s

Fedora GCC 支持的其它調(diào)試選項還包括-p和-pg,它們會將剖析(Profiling)信息加入到最終生成的二進(jìn)制代碼中。剖析信息對于找出程序的性能瓶頸很有幫助,是協(xié)助Linux Fedora GCC程序員開發(fā)出高性能程序的有力工具。在編譯時加入-p選項會在生成的代碼中加入通用剖析工具(Prof)能夠識別的統(tǒng)計信息,而- pg選項則生成只有GNU剖析工具(Gprof)才能識別的統(tǒng)計信息。

提醒一點,雖然Fedora GCC允許在優(yōu)化的同時加入調(diào)試符號信息,但優(yōu)化后的代碼對于調(diào)試本身而言將是一個很大的挑戰(zhàn)。代碼在經(jīng)過優(yōu)化之后,在源程序中聲明和使用的變量很可能不再使用,控制流也可能會突然跳轉(zhuǎn)到意外的地方,循環(huán)語句有可能因為循環(huán)展開而變得到處都有,所有這些對調(diào)試來講都將是一場噩夢。建議在調(diào)試的時候***不使用任何優(yōu)化選項,只有當(dāng)程序在最終發(fā)行的時候才考慮對其進(jìn)行優(yōu)化。

以上就是如何全面分析Fedora GCC程序,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享標(biāo)題:如何全面分析FedoraGCC程序
文章源于:http://weahome.cn/article/ijejde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部