参考:《Linux® Debugging and Performance Tuning: Tips and Techniques》 chapter 3
1. 测试程序
/home/a/j/nomad2:cat gdb_sample2.c #include <stdio.h> #include <pthread.h> #include <unistd.h> void* Thread_function1(void * arg) { unsigned int i=1; while(i < 11) { printf("Child Thread Iteration %d\n",i); i++; if(i%2) sleep(2); else sleep(1); } return arg; } void* Thread_function2(void * arg) { unsigned int i=1; while(i < 11) { printf("Child Thread 2 Iteration %d\n",i); i++; if(i%2) sleep(2); else sleep(1); } return arg; } int main (int argc, char *argv[]) { pthread_t thread; pthread_t thread2; if(pthread_create(&thread,NULL,Thread_function1,NULL)) { return(1); } if(pthread_create(&thread2,NULL,Thread_function2,NULL)) { return(1); } unsigned int i = 1; while(i < 11) { printf("Main Loop Iteration %d\n",i); i++; if(i%2) sleep(1); else sleep(2); } return 0; }
3. 关于调试:
1). When debugging, it is often a good practice to stop program execution at the bottom of a function so that a print or multiple displays can be done to see the current values stored in the data the function has altered.
list <func name>
break <line of }>
2). When gdb is used, the print command must
be invoked to display the variable's value. The user can see much more information at one time.