自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

全面分析講述Fedora GCC程序

系統(tǒng) Linux
Fedora GCC 支持的其它調(diào)試選項(xiàng)還包括-p和-pg,它們會(huì)將剖析(Profiling)信息加入到最終生成的二進(jìn)制代碼中。

在向大家詳細(xì)介紹Fedora GCC之前,首先讓大家了解下Linux,然后全面介紹Fedora GCC,希望對(duì)大家有用。Linux用戶、系統(tǒng)管理員和Linux系統(tǒng)自學(xué)者的參考書或培訓(xùn)教材,還可供希望轉(zhuǎn)入嵌入式領(lǐng)域的科研和工程技術(shù)人員參考使用。Fedora GCC 2009-03-02 19:13文件名:http2.c

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’)時(shí)在不兼容的指針類型間轉(zhuǎn)換
http2.c:81: 警告:傳遞參數(shù) 2 (屬于 ‘a(chǎn)ccept’)時(shí)在不兼容的指針類型間轉(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)錯(cuò)誤所在,可以使用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)的時(shí)候,表明GDB已經(jīng)做好準(zhǔn)備進(jìn)行調(diào)試了,現(xiàn)在可以通過run命令讓程序開始在GDB的監(jiān)控下運(yùn)行:Starting program: /root/http2正在監(jiān)聽Program exited normally.

3.下面為搜到的信息,尚未實(shí)驗(yàn)當(dāng)GDB提示符出現(xiàn)的時(shí)候,表明GDB已經(jīng)做好準(zhǔn)備進(jìn)行調(diào)試了,現(xiàn)在可以通過run命令讓程序開始在GDB的監(jiān)控下運(yù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é)果不難看出,程序是由于段錯(cuò)誤而導(dǎo)致異常中止的,說明內(nèi)存操作出了問題,具體發(fā)生問題的地方是在調(diào)用
_IO_vfscanf_internal ( )的時(shí)候。為了得到更加有價(jià)值的信息,可以使用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)將錯(cuò)誤定位到crash.c中的第11行了?,F(xiàn)在仔細(xì)檢查一下:
frame 3 #3 0x08048393 in main () at crash.c:11 11 scanf("%d", input);

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

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

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

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

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

【編輯推薦】

  1. 分析淺談詳解Fedora 9嵌入式
  2. 分析深談安全安裝Fedora linux桌面
  3. 學(xué)習(xí)如何Fedora 8安裝桌面
  4. 介紹在Fedora Core 5系統(tǒng)中安裝Realplayer
  5. 讓你們知道Fedora 9桌面系統(tǒng)也是很行的
責(zé)任編輯:佚名 來源: csdn
相關(guān)推薦

2009-12-18 16:08:17

Fedora proc

2009-12-23 15:17:55

Fedora gcc安

2009-12-22 14:54:37

Fedora 12正式

2009-12-23 18:23:53

Fedora Core

2009-12-28 17:41:10

Fedora Linu

2009-12-23 15:57:27

Fedora GCC

2009-12-24 09:47:17

Linux之父

2010-03-10 17:37:48

Linux磁盤配額

2009-12-28 16:23:51

Fedora grub

2009-12-18 18:22:31

Fedora SCSI

2009-12-18 14:50:43

Fedora進(jìn)程管理

2009-12-29 16:37:35

Ubuntu 9.10

2009-10-23 19:11:32

linux集群

2009-12-31 16:01:35

Ubuntu ISO

2009-12-25 09:17:50

2009-12-22 15:14:38

Fedora 8安裝

2009-12-28 16:39:56

Fedora 9

2009-12-23 13:33:23

Fedora 8設(shè)備驅(qū)

2009-12-23 18:54:53

Fedora Core

2010-03-10 14:04:35

Linux端口安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)