在第一篇中,我們?yōu)榇蠹医榻B了如何用VC6進行斷點調試,可以實現(xiàn)程序的分步執(zhí)行。今天我們將繼續(xù)深入,進行更多斷點調試的學習。
首先,寫一個例子程序:
#include int fun() { printf("Welcome to C language Reserch Center\n"); return 0; } int main() { int i=0; int sum=0; fun(); while(i++<100) { sum+=i; } printf("1+2+3+...+99+100 = %d\n",sum); return 0; }
大家可以先行閱讀以下程序,比較簡單,調用一個自定義函數(shù)輸出一句話,其二,計算1+2一直加到100的和并輸出。
然后,我們做練習,運用上節(jié)課的斷點調試逐步跟我們這個程序。
首先,我們在第一行int i=0;這里設置一個斷點,運行它,如圖:
注意看到,黑框里什么都沒有輸出,并且下方的變量監(jiān)視里i的值還是垃圾值,因為還未執(zhí)行這句話。
然后我們F10下一步執(zhí)行。但當大家執(zhí)行到fun();函數(shù)調用這條語句時,編譯器把它當成一句話來執(zhí)行,并未進入函數(shù)內部,而是一步帶過,如圖:
大家可自行上機實驗,可以發(fā)現(xiàn)F10單步執(zhí)行的單步是以一條C語言語句為單位的。鑒于這種情況,當我們懷疑fun函數(shù)時如何調試呢?
除了可以在fun函數(shù)內部設置斷點以外,我們還有一個辦法,就是不按F10,而按F11,F(xiàn)11的意思是單步執(zhí)行并介入,也就是說遇到單出的一句話就和F10沒什么區(qū)別了,但如果是函數(shù)調用這種還能“進入”的語句,它就會逐層深入進去!大家能理解嗎?
那我們來試一試,重新開始,回到程序一開始的斷點處,在黃色箭頭指向到fun()時,按F11,大家注意觀察!
黃色的箭頭會進入fun函數(shù)內部,如圖:
然后可以逐步跟蹤fun函數(shù)內部的語句了! 怎么樣?試試吧
當然,這里提示一下,對于我們想深入研究的函數(shù)我們可以F11介入一探究竟,但如果一直F11的話可能會一直深入程序底層可能按不出來哦!另外,對于printf這種庫函數(shù),如果還按F11的話,由于printf已經(jīng)編譯好,只能看到printf的匯編語句。所以大家還是根據(jù)情況按F10還是F11哦!
由于大家在實際的開發(fā)工作當中,程序往往比我們的例子程序復雜很多,比如多個函數(shù)、嵌套、庫函數(shù)調用等等,也有誤進入函數(shù)內部,或者已經(jīng)排查沒有問題的,如果想盡早結束此函數(shù)退出回到上一層調用處,如何實現(xiàn)呢?答案是:按shift+F11,既可以跳出函數(shù),返回到當前斷點函數(shù)調用的下一步。
好的,講到這里,大家請自行實驗,熟練掌握F10和F11以及shift+F11的混合使用!
請大家親自上機實驗!
以上