Posted on 2009-03-13 09:39
Prayer 閱讀(1235)
評論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
dbx是unix下普遍的源碼調試工具, 掌握好了dbx的使用,
無疑象增添了unix下編程的一把利器研究了一下午dbx的
連機文檔,發現dbx很是簡單易用現在簡單介紹一下dbx的
使用方法,讓更多的朋友免去獨自研究的苦楚dbx主要用來
調試用f77或cc等編譯工具生成的fortran和c語言的源代碼
當然該程序必須在調試過程中用-g參數包含入調試信息,
比方說我在unix下編寫了一個hello.c的程序:
void hello();
main()
{
int i,j;
i=1;
j=2;
i=i+1;
hello();
printf("%d,%d\n",i,j);
}
void hello()
{
printf("hello");
}
先用cc -o helloexe -g hello.c編譯生成帶調試信息的helloexe文件
然后用dbx helloexe來調試該文件
顯示dbx)這個dbx下調試的提示符
現在還不處在調試狀態下,需要首先進入調試狀態,
這樣泥需要先確定從哪里開始第一次中斷,以便以后的跟蹤調試
這里從第7行開始調試,用命令:
dbx)stop at 7
設置好斷點。
用如下命令開始運行;
dbx)run
這時程序運行到第7行停止下來,
并顯示下一行將要執行的程序
7: i=i+1
這時,你可以用:
dbx)print i命令來查看i變量的值
顯示
1
或者用printf "%d",i來顯示用c語言格式的輸出。(aix下沒有printf命令)
對以后比較負責的數組什么的,用
dbx)duel i方式可能更加顯示的方便。
以后泥可以用
dbx)step (step相當于trace into,就是可以進入線程內部,比如本例子中hello()模
塊)
或者
dbx)next (next不進入hello()模塊內部)
來執行下一行程序。
用
dbx)cont 命令可以直接運行到結束。
dbx中控制命令多多,功能十分強大的。
查看源碼可以用
dbx)list begin,end
就顯示hello.c文件中從begin到end行的所有程序,并且配上了行號。
用
dbx)file <filename>可以改變泥要查看的源碼文件名稱.
下面是查看了dbx的man手冊后對一些常用/使用命令的中文說明
這些命令對普通的調試已經足夠了,一些多線程的調試命令就不加以介紹了
dbx使用指南:
1:實用命令
quit/q 退出
q 退出
run arg1 arg2 ... 用參數運行現有進程
r 用上次的參數再次運行
stop at <line> 在第line行設斷點
stop at <proc> 在過程proc被調用處設斷點
cont <singal> 繼續運行到記號(斷點或其他)處
return 執行完目前的進程返回
print <exp> ... 打印表達式的值
printf "string",exp,... 用c語言的格式打印結果
where 打印當前調試狀態,包括當前進程等信息
func <proc> 看當前運行進程名/移動到調用proc進程的母進程處
file <file> 查看的文件切換到file文件處
list <exp1>,<exp2> 從file文件中列出從exp1行到exp2行
list <exp>:<int> 列出file文件中從exp行開始的int行
whatis <variable> 顯示變量的類型
sh 嶄時進入sh狀態
sh <shell command> 執行一shell命令
2:常用命令說明
alias name "string" 把string內容定義為一縮略語name
help section 尋找某指令的幫助
playback input <file> 從file中調入調試命令流
playback output <file> 輸出file中的調試命令流
record input <file> 把調試過程輸出到file中
record output <file> 把命令的運行輸出保存到file中
history 顯示歷史命令
hed 編輯歷史調試命令
!<int> 運行歷史命令流中第int個命令
!-<int> 運行歷史命令中倒數第int個命令
!<string> 運行歷史命令流中以string打頭的命令
!! 重復上一個命令
command;command ... 多調試命令間用";"隔開
step <int> 向前追蹤<int>步,進入線程
next <int> 向前追蹤<int>步,不進入線程
delete all 清所有斷點
listobj 列出目前使用的obj單元
listregions 列出被用到的內存區
enable <int>/disable <int> 恢復/禁用<int>號斷點
catch 顯示所有碰到的記號
cont at <line> 運行直到line行
intercept all 在所有例外處都中斷
bx chat 在所有出現char打頭的異常處中斷
kill <pid> 殺死pid線程
goto <line> 從line行開始運行
stop <var> 當var產生變化時中斷
stop <proc> 當進入proc進程時中斷
stop [var] [at <line>] if <exp> 條件中斷
trace <var> 當var變化時輸出其原值和新值
trace <proc> 當進入進程時打印出母進程和參數
when if <exp> {command_list} 當條件為真時執行命令列
when at <line> [if <exp>] {command_list} 在遇到line行時如果條件為真執行命令
列
duel <exp> 一種比較好的變量輸出方式
printregs 輸出所有寄存器的值
status 當前狀態
/<string> 向下尋找file中的string字符串
?<string> 向上尋找file中的string字符串
set 設定或顯示系統參數值