亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gcc-howto-5.html

?? Linux初學者最好的老師就是howto了。相當于函數man。
?? HTML
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
 <TITLE>The Linux GCC HOWTO中譯版V0.2: 除錯與監管</TITLE>
 <LINK HREF="GCC-HOWTO-6.html" REL=next>
 <LINK HREF="GCC-HOWTO-4.html" REL=previous>
 <LINK HREF="GCC-HOWTO.html#toc5" REL=contents>
</HEAD>
<BODY>
<A HREF="GCC-HOWTO-6.html">Next</A>
<A HREF="GCC-HOWTO-4.html">Previous</A>
<A HREF="GCC-HOWTO.html#toc5">Contents</A>
<HR>
<H2><A NAME="s5">5. 除錯與監管</A></H2>

<H2><A NAME="index.58"></A> <A NAME="ss5.1">5.1 預防重於治療(lint)</A>
 </H2>

<P> lint對Linux而言并沒有很廣泛的用途,主要是因為大部份的人都能滿足於gcc所提供的警告訊息。可能最有用的就是<CODE>-Wall</CODE>參數了---這個參數的用途是要求gcc將所有的警告訊息顯現出來;but probably has more mnemonic value if thought of as the thing you bang your head against.
<P>網路上有一個實用的public domain lint,位於 
<A HREF="ftp://larch.lcs.mit.edu/pub/Larch/lclint">ftp://larch.lcs.mit.edu/pub/Larch/lclint</A>。我并不知道這個站到底有多好就是了。
<P>
<H2><A NAME="index.59"></A> <A NAME="ss5.2">5.2 除錯</A>
 </H2>

<H3><A NAME="index.62"></A> <A NAME="index.61"></A> <A NAME="index.60"></A> 我要怎樣做才能將除錯資訊放到一支程式里頭?   </H3>

<P> 你需要添加<CODE>-g</CODE>的參數來編譯與連結程式,而且不可以用<CODE>-fomit-frame-pointer</CODE>參數。事實上,你不需要重新編譯所有的程式,只需重新編譯目前你正在除錯的部份即可。
<P>
<P>就a.out的組態而言,共享程式庫是以<CODE>-fomit-frame-pointer</CODE>編譯而成,這個時候,gdb就變得英雄無用武之地了。連結時給定<CODE>-g</CODE>的選項,應該就隱含著靜態連結的意義了;這就是為什麼要加-g的原因了。
<P>
<P>如果連結器連結失敗,告訴你找不到libg.a,那就是在<CODE>/usr/lib/</CODE>的目錄底下,少了<CODE>libg.a</CODE>。libg.a是一個C語言很特別的偵錯程式庫。一般在libc的套件內就會提供libg.a;不然的話(新版是這樣的),你可能需要拿libc的原始碼自己設置了,不過,實際上你應該<EM>不需要</EM>才對。不管是什麼目的,大部份的情況下,只需將libg.a連結到<CODE>/usr/lib/libc.a</CODE>,你就能得到足夠的資訊了。
<P>
<H3><A NAME="index.63"></A> 那,能不能把除錯資訊給拿掉? </H3>

<P>很多的GNU軟體在編譯連結時,都會設定<CODE>-g</CODE>的選項;這樣做會造成執行檔過大的問題(通常是靜態的連結)。實際上,這并不是一個很熱門的想法。
<P>如果程式本身有autoconf,產生了<CODE>configure</CODE>命令稿,通常你就可以用<CODE>./configure CFLAGS=</CODE>或是<CODE>./configure CFLAGS=-O2</CODE>來關掉除錯資訊。不然的話,你得檢查檢查Makefile了。當然啦,假如你用的是ELF,程式便會以動態的方式來連結,不論是否有<CODE>-g</CODE>的設定;因此你可以平常心把-g<CODE>拿掉</CODE>。
<P>
<P>
<H3><A NAME="index.64"></A> 實用的軟體 </H3>

<P>據了解,大部份的人都是用<B>gdb</B>來除錯。你可以從
<A HREF="ftp://prep.ai.mit.edu/pub/gnu">GNU archive sites</A>拿到原始程式;或者是到
<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/GCC">tsx-11</A>拿可執行檔。<B>xxgdb</B>是一個X介面的除錯程式,植基於gdb(也就是說你得先安裝好gdb,才能再裝xxgdb)。xxgdb的原始碼可以在
<A HREF="ftp://ftp.x.org/contrib/xxgdb-1.08.tar.gz">ftp://ftp.x.org/contrib/xxgdb-1.08.tar.gz</A>找到。
<P>另外,<B>UPS</B>除錯程式已由Rick Sladkey移植成功。UPS可以在X底下活得很好,不像xxgdb那樣---僅僅是gdb的X前端介面(X front end)。這支除錯程式有一大堆優良的特點,而且如果你得花時間去除一支破爛的程式,建議你考慮考慮xxgdb。事先編譯好的Linux版與修正版的原始碼可以在
<A HREF="ftp://sunsite.unc.edu/pub/Linux/devel/debuggers/">ftp://sunsite.unc.edu/pub/Linux/devel/debuggers/</A>找到。而最初的原始程式則放在 
<A HREF="ftp://ftp.x.org/contrib/ups-2.45.2.tar.Z">ftp://ftp.x.org/contrib/ups-2.45.2.tar.Z</A>。
<P>你可能會發現另一個用來除錯的工具<B>strace</B>,也是相當的有用。它可以顯示出由程序所產生的系統呼叫,而且還擁有其它眾多繁復的功能,像是如果你手邊沒有原始碼的話,strace可以幫你找出有那些路徑名稱(path-names)已編譯進執行檔內; exacerbating race conditions in programs that you suspect contain them;還有,strace可拿來學習程式是怎麼在電腦中執行的。最新的版本(目前是3.0.8)可在找到
<A HREF="ftp://ftp.std.com/pub/jrs/">ftp://ftp.std.com/pub/jrs/</A>。
<P>
<P>
<H3>背景程式(常駐程式)</H3>

<P>早期典型的常駐程式(daemon programs)是執行<CODE>fork()</CODE>,然後終止父程序。這樣的做法使得除錯的時間減短了。
<P>
<P>了解這點的最簡單的方法就是替<CODE>fork()</CODE>設一個中斷點(breakpoint)。當程式停止時,強迫fork()傳回0。
<P>
<BLOCKQUOTE><CODE>
<PRE>
(gdb) list 
1       #include &lt;stdio.h>
2
3       main()
4       {
5         if(fork()==0) printf("child\n");
6         else printf("parent\n");
7       }
(gdb) break fork
Breakpoint 1 at 0x80003b8
(gdb) run
Starting program: /home/dan/src/hello/./fork 
Breakpoint 1 at 0x400177c4

Breakpoint 1, 0x400177c4 in fork ()
(gdb) return 0
Make selected stack frame return now? (y or n) y
#0  0x80004a8 in main ()
    at fork.c:5
5         if(fork()==0) printf("child\n");
(gdb) next
Single stepping until exit from function fork, 
which has no line number information.
child
7       }
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H3>核心檔案</H3>

<P>當Linux開機時,通常組態會設定成不要產生核心檔案。要是你那麼喜歡它們的話,可以用shell的builtin命令使其重新生效:就C-shell相容的shell(如tcsh)而言,會是下面這樣:
<BLOCKQUOTE><CODE>
<PRE>
% limit core unlimited
</PRE>
</CODE></BLOCKQUOTE>

而類似Bourne shell的shell(sh, bash, zsh, pdksh)則使用下面的語法:
<BLOCKQUOTE><CODE>
<PRE>
$ ulimit -c unlimited
</PRE>
</CODE></BLOCKQUOTE>
<P>如果你想要有個多才多藝的核心檔命名(core file naming)(for
example, if you're trying to conduct a post-mortem using a debugger that's buggy itself),那麼你可以對你的核心程式做一點小小的更動。找一找<CODE>fs/binfmt_aout.c</CODE>與<CODE>fs/binfmt_elf.c</CODE>檔中與下列相符的程式片段(in newer kernels, you'll have to grep around a little in older ones):
<P>
<BLOCKQUOTE><CODE>
<PRE>
        memcpy(corefile,"core.",5);
#if 0
        memcpy(corefile+5,current->comm,sizeof(current->comm));
#else
        corefile[4] = '\0';
#endif
</PRE>
</CODE></BLOCKQUOTE>
<P>將<CODE>0</CODE>換成<CODE>1</CODE>.
<P>
<H2><A NAME="ss5.3">5.3 監管</A>
</H2>

<P> 監管(Profiling)是用來檢核一支程式中那些部份是最常呼叫或是執行的時間最久的方法。這對程式的最佳化與找出何時時間是浪費掉的而言,是相當好的方式。你必須就你所要的時程資訊(timing information)的目的檔加上<CODE>-p</CODE>來編譯,而且如果要讓輸出的檔案有意義,你也會需要<CODE>gprof</CODE>(來自binutils套件的命令)。參閱<CODE>gprof</CODE>的manual page,可得知其細節。
<P>11/18/97譯
<P>
<P>
<HR>
<A HREF="GCC-HOWTO-6.html">Next</A>
<A HREF="GCC-HOWTO-4.html">Previous</A>
<A HREF="GCC-HOWTO.html#toc5">Contents</A>
</BODY>
</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码中文字幕综合| 国内外成人在线| 9色porny自拍视频一区二区| 欧美日韩国产高清一区| 欧美亚洲丝袜传媒另类| 色欧美日韩亚洲| 国产精品毛片久久久久久久| 中文在线一区二区| 国产精品国模大尺度视频| 国产寡妇亲子伦一区二区| 这里只有精品电影| 日韩一区二区在线观看| 国产剧情av麻豆香蕉精品| 国产真实乱偷精品视频免| 中文天堂在线一区| 一本大道av一区二区在线播放| 有码一区二区三区| 日韩视频免费观看高清完整版 | 久久久久久久久伊人| 99久久精品国产精品久久| 777色狠狠一区二区三区| 成人av资源下载| 久久看人人爽人人| 久久久www成人免费无遮挡大片| 欧美国产日韩a欧美在线观看| 亚洲日本在线天堂| 黑人巨大精品欧美黑白配亚洲 | 国产在线乱码一区二区三区| 91日韩精品一区| 久久嫩草精品久久久久| 美女脱光内衣内裤视频久久影院| 成人h精品动漫一区二区三区| 韩国视频一区二区| 久久精品视频一区二区| 3d动漫精品啪啪| 91福利在线导航| 欧美日韩免费高清一区色橹橹 | 欧美午夜宅男影院| 国产真实精品久久二三区| 国产午夜亚洲精品理论片色戒| 久久久久国产免费免费| 麻豆91免费看| 久久蜜桃一区二区| 成人av电影在线| 91国偷自产一区二区开放时间 | 91麻豆精品国产| 亚洲最色的网站| 亚洲激情第一区| 欧美一区二区在线免费观看| 亚洲人成精品久久久久| 91官网在线观看| 91精品国产乱| 欧美a级一区二区| 亚洲电影激情视频网站| 国产精品一级片在线观看| 韩国v欧美v亚洲v日本v| 亚洲精品一区在线观看| 精品一区二区在线免费观看| 久久蜜臀中文字幕| 成人av网站在线观看| 欧美日韩国产影片| 日韩三级视频在线看| 日本一二三四高清不卡| 99国产精品一区| 精品粉嫩超白一线天av| 久久这里只有精品首页| 国产精品久久久久影院老司| 亚洲图片自拍偷拍| 综合av第一页| 日韩欧美中文字幕制服| 亚洲欧洲三级电影| 欧美色老头old∨ideo| 精品成人a区在线观看| 美女脱光内衣内裤视频久久影院| 国产一区二区三区四区五区入口| 丁香六月久久综合狠狠色| 成人免费观看视频| 91国模大尺度私拍在线视频| 国产日产欧美一区二区三区| 亚洲精品一区在线观看| 欧洲激情一区二区| 亚洲免费三区一区二区| 国产精品你懂的| 亚洲欧美影音先锋| 国产午夜亚洲精品午夜鲁丝片| 亚洲图片有声小说| 亚洲福利一区二区三区| 不卡在线视频中文字幕| 一区二区免费在线| 久久成人麻豆午夜电影| 国产日韩欧美激情| 欧美中文字幕一二三区视频| 日产国产高清一区二区三区| 国内外精品视频| 日韩高清不卡一区二区三区| 精品中文字幕一区二区| 亚洲一区精品在线| 午夜国产精品影院在线观看| 国产乱国产乱300精品| 欧日韩精品视频| 成人精品gif动图一区| 久久99久久精品欧美| 色悠悠亚洲一区二区| 国产精品三级电影| 国产福利91精品一区二区三区| 日韩电影一二三区| 日韩在线卡一卡二| 国产精品午夜春色av| 亚洲综合精品自拍| 日韩在线一区二区三区| 色呦呦日韩精品| 天堂va蜜桃一区二区三区 | 久久―日本道色综合久久| 91麻豆精品国产无毒不卡在线观看| 在线成人午夜影院| 蜜臀av一区二区在线免费观看| 亚洲图片你懂的| 久久―日本道色综合久久| 精品福利一区二区三区免费视频| 欧美成人猛片aaaaaaa| 91视频免费看| 日韩精品综合一本久道在线视频| 国产丝袜在线精品| 欧美区视频在线观看| voyeur盗摄精品| 欧美精品tushy高清| 亚洲一区二区在线视频| 3751色影院一区二区三区| 色综合久久久久综合体| 欧美一区二区在线播放| 国产精品美女一区二区| 亚洲欧洲色图综合| 丁香激情综合国产| 99久久精品国产精品久久| 不卡一区二区在线| 亚洲欧洲av另类| 91老师片黄在线观看| 懂色av一区二区夜夜嗨| 日韩你懂的电影在线观看| 久久久精品免费免费| 一区二区中文视频| 日韩1区2区3区| 色视频成人在线观看免| 欧美变态口味重另类| 久久不见久久见免费视频7 | 欧美日韩国产在线观看| 国产精品每日更新| 99久久er热在这里只有精品15| 午夜激情久久久| 国产亚洲精品福利| 欧美精品1区2区3区| 亚洲一区二区综合| 国产精品中文字幕欧美| 一区二区三区精品| 欧美一区二区三区在| 免费精品99久久国产综合精品| 天天av天天翘天天综合网色鬼国产| 亚洲女人****多毛耸耸8| 精品国产一区二区三区久久久蜜月| 国产一区二区在线影院| 风间由美中文字幕在线看视频国产欧美 | 在线观看日韩电影| 91蜜桃视频在线| 亚洲国产成人av网| 欧美国产日韩在线观看| 久久久不卡网国产精品二区| 热久久一区二区| 91精品福利在线一区二区三区 | 日产欧产美韩系列久久99| 美日韩一区二区| 国产欧美一区视频| 欧美高清在线精品一区| 久久先锋影音av鲁色资源网| 在线看国产一区二区| 首页国产欧美日韩丝袜| 国产sm精品调教视频网站| 国产伦精品一区二区三区免费迷| 欧美日韩精品一区视频| 717成人午夜免费福利电影| 日韩精品1区2区3区| 欧美日韩亚洲不卡| wwwwxxxxx欧美| 99精品视频在线观看免费| 久久久综合视频| 日韩va亚洲va欧美va久久| 亚洲免费av在线| 日韩国产精品91| 这里只有精品电影| 在线观看成人小视频| 美女视频一区二区三区| 国产另类ts人妖一区二区| 成人涩涩免费视频| 亚洲高清在线精品| 一区二区三区在线视频免费观看| 不卡电影一区二区三区| 国产丶欧美丶日本不卡视频| 精品88久久久久88久久久| 99视频精品免费视频| 久久精品国产亚洲一区二区三区| 国产一区在线观看视频|