2010年11月17日 星期三

[gdb 命令] step & next : 執行程式下一(行)步


語法 :
step,s | Execute next program line (step into any function calls in the line)
next, n | Execute next program line (step over any function calls in the line)

使用範例 :
考慮代碼如下 :
- stepnext.c :
  1. #include   
  2.   
  3. int mypow(int n, int m) {  
  4.         int temp;  
  5.         if(m==0return 1;  
  6.         temp = mypow(n, m>>1);  
  7.         if(m&1return temp*temp*n;  
  8.         return temp*temp;  
  9. }  

編譯並使用gdb 執行該程式 :
linux-tl0r:~/gdbDemo # gcc -g stepnext.c -o stepnext <編譯程式>
linux-tl0r:~/gdbDemo # gdb stepnext <進入 gdb>
(gdb) list 13 <檢查 13行附近程式碼>
8 return temp*temp;
9 }
10
11 int main(void) {
12 int a=2, b=11, c;
13 c = mypow(a, b);
14 printf("%d\n", c);
15 return 0;
16 }
(gdb) start <開始程式>
Temporary breakpoint 1, main () at stepnext.c:12
12 int a=2, b=11, c;
(gdb) until 13 <一直執行到 13行停下來>
main () at stepnext.c:13
13 c = mypow(a, b);
(gdb) step <執行下一行(13), 因為是 step 所以會進入 mypow() 函式>
mypow (n=2, m=11) at stepnext.c:5
5 if(m==0) return 1; <在 mypow() 函式裡>
(gdb) s <繼續執行下一行>
6 temp = mypow(n, m>>1);
(gdb) next <執行下一行(6), 因為是 next, 所以不會進入 mypow() 函式, 而是直接跳到第7行.>
7 if(m&1) return temp*temp*n;
...(以下省略)...

所以也就是說 :
This message was edited 4 times. Last update was at 17/11/2010 11:35:55

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...