dbx是在Unix or Linux做Debug的一個好工具,所以學會這個工具其實是有其用處的。
如果不會通常在Unix or Linux下開發只能靠不斷的在程式當中插入大量的Log來做Debug工作。
如果要在Unix下展開Debug建議還是練習一下dbx比較好,第一步我們先寫一個Hello world吧!!
程式碼
數位高手(NBP)

#include <stdio.h>
void hello();
void main(void)
{
 int i,j;
 i=1;
 j=2;
 i=i+1;
 hello();
 printf("%d,%d",i,j);
}

void hello()
{
 printf("hello");
}
 
>Parsed in 0.032 seconds, using GeSHi 1.0.6,數位高手(NBP)


編譯重點
記得編譯的時候要加上參數-g
QUOTE
-g        Produce information for the debugger

cc -o hello -g hello.c

那如何展開dbx的動作呢?
直接執行dbx hello這樣就會進入dbx的環境當中了。

開始Debug
1. 下中斷點(stop at ??)

(dbx) stop at 9
[1] stop at 9
(dbx)

以上的指令就是告知等下執行的時候停在line 9 (hello();)。
2. 執行程式 (run)
準備開始執行程式,下Run這個命令就可以了。

[1] stopped in main at line 9
  9  hello();
(dbx)

3. 列印參數 (print ??)
debug的過程中總是想要知道每個參數的狀況,所以可以使用print這個指令將需要的參數列印出來了解一下。

(dbx) print i,j
2 2
(dbx)


4. 單步執行
單步執行通常分兩種,一種事會進入step(trace into),另外一種事next(trace over)。
如果我們再第九步這個hello();的點上,如果採用step就會進入函式當中,如果執行next則往下一行執行不進入函式。
step

(dbx) step
stopped in hello at line 15
 15  printf("hello");
(dbx)


next

(dbx) next
stopped in main at line 10
 10  printf("%d,%d",i,j);
(dbx)


如果一切都沒有問題想要直接Run完整個程式怎麼辦呢?
使用cont就可以了。

(dbx) cont
hello2,2
execution completed (exit code 3)
(dbx)


5. 查看原始碼
在這裡debug最麻煩的就是要知道source code,所以我們可以使用list begin,end

(dbx) list 1,3
  1  #include <stdio.h>
  2  void hello();
  3  void main(void)
(dbx)


6. 清除中斷點
清除中斷的的方式是使用clear n(行數)

(dbx) clear 7
no breakpoints found at line 7
(dbx) clear 9
(dbx)

當clear的行數沒有中斷點的時候會告訴你找不到,如果有的話也就會直接執行。
如果要消除所有的中斷點則可以使用delete all的方法。

(dbx) delete all
(dbx)




這裡只做簡單的使用入門,其實dbx功能還有很多也歡迎大家提供任何tips給大家。
如果想要知道還有哪些命令可以使用可以使用help可以看到很多的指令,然後再執行help command就可以知道詳細的用途了。

講這麼多沒有提到如何離開dbx這個程式,很簡單.....真的很簡單....使用quit就可以了。

piratechu 發表在 痞客邦 PIXNET 留言(0) 人氣()