上篇文章 中,已概述如何進行 trace,第四步驟提到的是「不進入函式」方式執行,

但實際上還有另一「逐步執行」選項,本文簡略說明其差異。

 


 

#include <stdio.h>
int main()
{
    int i=0, sum = 0;
    for(i=0; i<=10; ++i){
        sum+=i;
        printf("sum=%d\n", sum);
    }
    return 0;
}

 

以這份程式碼而言,斷點設在 int i=0... 那行,接下來若一直進行「逐步執行」,快捷鍵 F11,到 printf 那行時,將會出現以下畫面

VCMPI000.png  

再按 F10,只會是黃色鍵頭往下移而已,一開始會覺得很莫名奇妙。

原因在於,printf 是 C 語言提供的函式,而按下「逐步執行」, F11 時,會追溯到 printf 是怎麼寫的,

但這追內建函式庫,對 Debug Trace 並沒有太大助益,於是上述情況,

「不進入函式」,F10 方式執行較為合理,便不會再 Trace 到 C 語言內建的函式庫裡去。

 


 

然而,有時那些副函式,可能是自己,或其他 coder 自己寫的,如

 

#include <stdio.h>

int sum(int n)
{
    int i=0, s=0;
    for(i=0; i<=n; ++i)
        s+=i;
    return s;
}

int main()
{
    int x = sum(10);
    return 0;
}

 

中斷點設在 int x = sum(10); 那行。接下來,如果要查看 coder 是怎麼寫 sum 這支副函式,

此時該進行的是「逐步進行 (F11)」,而非「不進入函式(F10)」。

如果進入副函式,執行很久了,不想再從副函式裡面 trace 的話,

此時再按下 「偵錯 -> 跳離函式」,快捷鍵 Alt + F11,即可從副函式再前回到呼叫處。

 

VCMPI001.png 


至於遇到一些 Visual C 已提供的函式庫,是不是一律都用「不進入函式」執行?那倒未必。

有些人可能對於一些內建函式之寫法感到好奇,想進去一探究竟,於是故意寫下一大段 code,

把想調閱的函式全都寫下來,再每次逐步執行,進去看裡面是怎麼寫的,

只是這種方式並不能保證成功,像是 Visual C 裡面的 math.h 函式便調不出來,

有興趣這部份可再多加練習與 trace ,做為觀查。


這裡再紀錄一些常用的快捷鍵

F9 : 切換該行之斷點狀態。

F5:程式開始偵錯執行,若有設斷點,則一路執行到斷點處;否則執行至程式結束。

F10 : 不進入函式方式,逐步執行。

F11:進入函式方式,逐步執行。

Shift + F11 :跳離現正在 trace 之副函式。

 

 

 

 

 

 

 

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