首先一个简单程序源代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <omp.h> 4 int main(int argc, char * argv[]){ 5 int i, k,m,n; 6 printf("i=%d,threads_num=%d\n",i, omp_get_num_threads()); 7 printf("i=%d,thread_id=%d\n",i, omp_get_thread_num()); 8 #pragma omp parallel for 9 for(i=0;i<4;i++) 10 { 11 k=10; 12 m=10; 13 n=k+m; 14 printf("i=%d,n=%d,thread_id=%d\n",i,n, omp_get_thread_num()); 15 if(k>1) 16 printf("OK\n"); 17 } 18 return 1; 19 }
编译成 test_omp
step 1:gdb test_omp
step 2:break 15
step 3:run
(gdb) r Starting program: /home/xqc/gmptest/test_omp [Thread debugging using libthread_db enabled] i=0,threads_num=1 i=0,thread_id=0 [New Thread 0x7ffff740f700 (LWP 17108)] [New Thread 0x7ffff6c0e700 (LWP 17109)] [New Thread 0x7ffff640d700 (LWP 17110)] Breakpoint 1, main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15 15 k=10; (gdb)
(gdb) info threads 4 Thread 0x7ffff640d700 (LWP 17110) main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15 3 Thread 0x7ffff6c0e700 (LWP 17109) main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15 2 Thread 0x7ffff740f700 (LWP 17108) main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15 * 1 Thread 0x7ffff7fdf780 (LWP 17105) main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15 (gdb)
step4: thread 2
(gdb) thread 2 [Switching to thread 2 (Thread 0x7ffff740f700 (LWP 17108))]#0 main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15 15 k=10; (gdb)
至此,就可以对thread 2号线程进行debug了。