一种通过printf打印的调试程序的方法

    我们在写代码的时候,有时候需要调试程序的时候,对于初学者,可以通过简单的增加printf函数打印,这样能够来跟踪程序的踪迹,举个很简单的代码:

#include
#include

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);

 

对新手小白还是有很有用处的,大神就可以忽略了。

你可能感兴趣的:(linux)