日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Sco Unix下用dbxtra調(diào)試C程序


在sco Unix下編程大多離不開C語言,即使是數(shù)據(jù)庫應(yīng)用也有很多是與c搭配使用的,例如informix esql/c 就可以在c語言中嵌入sql 語句 。很多人認(rèn)為在unix下寫程序是件很痛苦的事情,其中一個(gè)很重要原因是不知道在unix下怎樣調(diào)試程序 。其實(shí)在sco unix源碼調(diào)試器是dbxtra或dbXtra,Linux下是gdb 。它們類似turbo c的調(diào)試器,可以跟蹤源碼變量 。在unix 下調(diào)試程序有如下傳統(tǒng)方法
一、在要調(diào)試語句之前,輸出要調(diào)試的變量,利用printf()函數(shù) 。二、寫日志文件,把結(jié)果輸出到文件中避免屏幕混亂,利用fprintf()函數(shù) 。三、利用sco 內(nèi)置調(diào)試器dbxtra或dbXtra 。dbxtra 適用字符界面,在sco unix的圖形界面用dbXtra 。(編按:請注意大小寫)以下是dbxtra基本命令:
c cont 在斷點(diǎn)后繼續(xù)執(zhí)行
d delete 刪除所設(shè)斷點(diǎn)
h help 幫助
e edit 編輯源程序
n next 源程序區(qū)的內(nèi)容向下翻一屏 。
p print 顯示變量
q quit 退出dbxtra
r run 運(yùn)行程序,直到遇上設(shè)置的斷點(diǎn)
rr rerun 再次運(yùn)行
s step 單步運(yùn)行
st stop 設(shè)置斷點(diǎn)
j status 顯示當(dāng)前斷點(diǎn)
t where 顯示當(dāng)前狀態(tài),列出所有設(shè)置的變量值
di display 開顯示窗,用于查看變量
ud undisplay 刪除顯示窗的條目
f forward 源程序區(qū)的內(nèi)容向上 翻一屏 。
B backward 源程序區(qū)的內(nèi)容向下 翻一屏 。
Stopi stop inst 設(shè)置斷點(diǎn)
tracei trace inst跟蹤子程序dbxtra [options] [objectfile ]
dbxtra 在啟動(dòng)時(shí)有個(gè)參數(shù)-Idir值得一提.我們在編寫一個(gè)較大程序的時(shí)候,通常源程序和編譯生成的可執(zhí)行文件都放在不同的目錄中,這樣便于管理 。默認(rèn)dbxtra將在可執(zhí)行文件所在的目錄下找匹配c的源程序 。當(dāng)我們啟動(dòng)時(shí),指定-I參數(shù),dbxtra就會(huì)到我們指定的目錄下找匹配的c程序 。例如:
dbxtra -I"workc" program1源程序在用cc編譯時(shí)要帶上-g 參數(shù),這樣是加上符號(hào)表等調(diào)試信息 。只有這樣編譯過的文件,dbxtra才可以調(diào)試 。調(diào)試信息使源代碼和機(jī)器碼關(guān)聯(lián) 。下面這個(gè)C程序輸出結(jié)果和我們的預(yù)想結(jié)果不一樣,說明某些地方有錯(cuò)誤 。我們用調(diào)試器來調(diào)試它:程序一:t.c
main()
{ int i=10 ,*p1;
float j=1.5,*p2;
p1=&i;
p2=&j;
p2=p1;
printf("%d,%dn",*p1,*p2);
}首先帶上-g參數(shù)編譯 cc -g -o t t.c
啟動(dòng)調(diào)試器 dbxtra t
屏幕顯示:
1.main()
2.{ int i=10 ,*p1;
3. float j=1.5,*p2;
4. p1=&i;
5. p2=&j;
6. p2=p1;
7. printf("%d,%dn",*p1,*p2);
8.}
C[browse] File:t.c Func.-
Readubg symbolic information
Type "help" for help
(dbxtra)
(dbxtra)設(shè)置斷點(diǎn):
(dbxtra)stop at 5
運(yùn)行:
(dbxtra) run
程序自動(dòng)在第5行停下 。
這時(shí)我們可以看變量的值 。
(dbxtra) print *p1【Sco Unix下用dbxtra調(diào)試C程序】單步執(zhí)行 。
(dbxtra) step
程序?qū)?zhí)行第5行源碼,指針將移到第6行 。
(dbxtra) print *p2(dbxtra) step
程序執(zhí)行了第6行源碼后,將指針移到第7行 。
(dbxtra) print *p1 , *p2
我們發(fā)現(xiàn) 在執(zhí)行了第6行源碼后,*p1,*p2的值就不對了,所以問題就出在第6行上 。仔細(xì)檢查后發(fā)現(xiàn)指針p1指向整型,指針p2指向?qū)嵭?。它們之間的賦值要進(jìn)行強(qiáng)制類型轉(zhuǎn)換 。這種錯(cuò)誤在C程序中是很常見的 。
有時(shí)我們在調(diào)試一些程序時(shí),要在整個(gè)程序運(yùn)行中時(shí)刻監(jiān)視莫些變量的值,例如程序一中我們要時(shí)刻了解*p1,*p2的值,除了在每一行程序執(zhí)行完后,打print *p1,*p2外,還可以開一個(gè)顯示窗口 。(dbxtra)display *p1,*p2用undisplay 刪掉不想要的變量 。有些程序運(yùn)行時(shí)要帶參數(shù),mycat /etc/passwd 在調(diào)試時(shí)候(dbxtra) run "/etc/passwd"再運(yùn)行時(shí),無需再寫一遍參數(shù) 。(dbxtra) rerun在涉及到curses庫編程或屏幕有大量的人機(jī)界面時(shí),為了調(diào)試方便,我們可以把程序輸出結(jié)果重定向到個(gè)虛屏 。(dbxtra) run >/dev/tty03當(dāng)然要先把tty03 disable 掉 。(disable tty03)dbxtra還有很多高級的用法,有興趣的讀者可以參照dbxtra本身的help,進(jìn)一步研究 。

推薦閱讀