使用 GDB,我似乎无法在 OpenMP 线程中打印共享变量的值。例如,使用以下程序:
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int priv, tid, pub = 100;
#pragma omp parallel private(priv, tid) num_threads(2)
{
tid = omp_get_thread_num();
priv = tid * 10;
#pragma omp sections
{
#pragma omp section
{
printf("SECTION 0: tid=%d, priv=%d, pub=%d\n", tid, priv, pub);
}
#pragma omp section
{
printf("SECTION 1: tid=%d, priv=%d, pub=%d\n", tid, priv, pub);
}
}
}
return EXIT_SUCCESS;
}
在 GDB 中,如果我在第 15 行中断(第 0 节的 printf),并尝试打印 "pub" 的值,我会得到 «No symbol "pub" in current context。» 信息:
Breakpoint 1, main._omp_fn.0 () at omp_simplesec.c:15
15 printf("SECTION 0: tid=%d, priv=%d, pub=%d\n", tid, priv, pub);
(gdb) print pub
No symbol "pub" in current context.
我正在使用 GCC 进行编译,并尝试了不同的调试标志(-g3 -ggdb3 -gstabs3 -gstabs+3),但没有成功。我还尝试使用 -O0 禁用所有优化,但同样没有成功。但是,我可以使用 -gstabs+ 标志查看私有变量的值。
提前致谢。