我們在寫代碼的時候,有時候需要調試程式的時候,對于初學者,可以通過簡單的增加printf函數列印,這樣能夠來跟蹤程式的蹤迹,舉個很簡單的代碼:
#include<stdio.h>
#include<stdlib.h>
int main(){
int a = 4;
int b = 2;
int c = 5;
int d = 800;
printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__);
int result = 100*a + 10*b + c;
printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__);
if (result > d){
//do a
printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__);
} else {
//do b
printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__);
}
printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__);
return 0;
}
通過 printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__); 列印運作的檔案名,函數名,行數。
/mnt/nfsroot/kervin/test/print$ ./a.out
--[function.c] main:11--
--[function.c] main:14--
--[function.c] main:20--
--[function.c] main:23--
可以看到函數的詳細運作路徑。
在有遇到kernel panic的時候,有時候通過printf無法直接定位到哪裡的問題,這是因為printf有滞後性,當kernel panic的時候,前面會有部分printf還沒來的及列印到序列槽,這樣會給我們分析定位問題造成困擾,我們可以在printf後面加上sleep函數,用來給足夠的時間,保證執行到的printf都能夠列印出來,
printf("--[%s] %s:%d--\n", __FILE__, __FUNCTION__, __LINE__);
sleep(1);
對新手小白還是有很有用處的,大神就可以忽略了。