在 上篇文章 中,已概述如何進行 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 那行時,將會出現以下畫面
再按 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,即可從副函式再前回到呼叫處。
至於遇到一些 Visual C 已提供的函式庫,是不是一律都用「不進入函式」執行?那倒未必。
有些人可能對於一些內建函式之寫法感到好奇,想進去一探究竟,於是故意寫下一大段 code,
把想調閱的函式全都寫下來,再每次逐步執行,進去看裡面是怎麼寫的,
只是這種方式並不能保證成功,像是 Visual C 裡面的 math.h 函式便調不出來,
有興趣這部份可再多加練習與 trace ,做為觀查。
這裡再紀錄一些常用的快捷鍵
F9 : 切換該行之斷點狀態。
F5:程式開始偵錯執行,若有設斷點,則一路執行到斷點處;否則執行至程式結束。
F10 : 不進入函式方式,逐步執行。
F11:進入函式方式,逐步執行。
Shift + F11 :跳離現正在 trace 之副函式。
留言列表