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