亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1721 | 回復(fù): 0
打印 上一主題 下一主題

Sco Unix下用dbxtra調(diào)試C程序 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-01-21 18:18 |只看該作者 |倒序瀏覽
在sco unix下編程大多離不開C語言,即使是數(shù)據(jù)庫應(yīng)用也有很多是與c搭配使用的,例如informix esql/c 就可以在c語言中嵌入sql 語句。很多人認為在unix下寫程序是件很痛苦的事情,其中一個很重要原因是不知道在unix下怎樣調(diào)試程序。其實在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      在斷點后繼續(xù)執(zhí)行
  d               delete    刪除所設(shè)斷點
  h               help      幫助
  e               edit      編輯源程序
  n               next      源程序區(qū)的內(nèi)容向下翻一屏。
  p               print     顯示變量
  q               quit      退出dbxtra
  r               run       運行程序,直到遇上設(shè)置的斷點
  rr              rerun     再次運行
  s               step      單步運行
  st              stop      設(shè)置斷點
  j               status    顯示當(dāng)前斷點  
  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è)置斷點
  tracei          trace inst跟蹤子程序  
  dbxtra [options] [objectfile ]
  dbxtra在啟動時有個參數(shù)-Idir值得一提.我們在編寫一個較大程序的時候,通常源程序和編譯生成的可執(zhí)行文件都放在不同的目錄中,這樣便于管理。默認dbxtra將在可執(zhí)行文件所在的目錄下找匹配c的源程序。當(dāng)我們啟動時,指定-I參數(shù),dbxtra就會到我們指定的目錄下找匹配的c程序。 例如:         
  dbxtra -I"\work\c" program1  
  源程序在用cc編譯時要帶上-g 參數(shù),這樣是加上符號表等調(diào)試信息。只有這樣編譯過的文件,dbxtra才可以調(diào)試。調(diào)試信息使源代碼和機器碼關(guān)聯(lián)。  
  下面這個C程序輸出結(jié)果和我們的預(yù)想結(jié)果不一樣,說明某些地方有錯誤。我們用調(diào)試器來調(diào)試它:  
  程序一:  
t.c
main()
{  int   i=10 ,*p1;
   float j=1.5,*p2;
   p1=&
   p2=&
   p2=p1;
   printf("%d,%d\n",*p1,*p2);
}
  首先帶上-g參數(shù)編譯  cc -g -o t t.c
  啟動調(diào)試器          dbxtra t
  屏幕顯示:
1.main()
2.{  int   i=10 ,*p1;
3.   float j=1.5,*p2;
4.   p1=&
5.   p2=&
6.   p2=p1;
7.   printf("%d,%d\n",*p1,*p2);
8.}
C[browse] File:t.c    Func.-     
Readubg symbolic information
Type    'help' for help
(dbxtra)
(dbxtra)
  設(shè)置斷點:
  (dbxtra)stop at 5
  運行:
  (dbxtra) run
  程序自動在第5行停下。
  這時我們可以看變量的值。
  (dbxtra) print *p1
  單步執(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行上。仔細檢查后發(fā)現(xiàn)指針p1指向整型,指針p2指向?qū)嵭汀K鼈冎g的賦值要進行強制類型轉(zhuǎn)換。這種錯誤在C程序中是很常見的。有時我們在調(diào)試一些程序時,要在整個程序運行中時刻監(jiān)視莫些變量的值,例如程序一中我們要時刻了解*p1,*p2的值,除了在每一行程序執(zhí)行完后,打print *p1,*p2外,還可以開一個顯示窗口。  
  (dbxtra)display *p1,*p2  
  用undisplay 刪掉不想要的變量。  
  有些程序運行時要帶參數(shù),mycat /etc/passwd 在調(diào)試時候  
  (dbxtra) run '/etc/passwd'  
  再運行時,無需再寫一遍參數(shù)。  
  (dbxtra) rerun  
  在涉及到curses庫編程或屏幕有大量的人機界面時,為了調(diào)試方便,我們可以把程序輸出結(jié)果重定向到個虛屏。  
  (dbxtra) run >/dev/tty03  
  當(dāng)然要先把tty03 disable 掉。(disable tty03)  
  dbxtra還有很多高級的用法,有興趣的讀者可以參照dbxtra本身的help,進一步研究。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/13151/showart_69716.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP