Как напечатать локальные переменные OpenMP параллельной области в GDB? - PullRequest
1 голос
/ 12 марта 2019

Я застрял с отладкой локальных переменных внутри параллельной области OpenMP.

Учитывая этот код:

#include<omp.h>
#include<stdio.h>

int main(){
    int a = 0;
    #pragma omp parallel shared(a)
    {
    int m_a = a + omp_get_thread_num();
    printf("%d\n",m_a); //breakpoint set here
    }
}

Код работает хорошо, но если я установлю точку останова в строке с комментарием и наберу info locals в gdb, он просто покажет переменную a. Ввод print m_a результатов на No symbol "m_a" in current context.

1 Ответ

0 голосов
/ 13 марта 2019

Это ничего не отвечает, просто сообщите, что я не могу повторить это, код скомпилирован с

gcc x.c -W -Wall -fopenmp -ggdb

и сессией GDB, как показано ниже, все выглядит хорошо, я думаю, это может быть связано с флагом компиляции,попробуйте добавить -O0 в дополнение к -g или -ggdb

Reading symbols from ./a.out...done.
(gdb) break 9
Breakpoint 1 at 0x40064d: file x.c, line 9.
(gdb) run
Starting program: /some/path/to/a.out 
[Thread debugging using libthread_db enabled]
Thread 3 "a.out" hit Breakpoint 1, main._omp_fn.0 () at x.c:9
9           printf("%d\n",m_a); //breakpoint set here
(gdb) info locals
m_a = 2
a = 0
(gdb) info threads
  Id   Target Id         Frame 
  1    Thread 0x2aaaaaaebb40 (LWP 31287) "a.out" main._omp_fn.0 () at x.c:9
  2    Thread 0x2aaaabab0700 (LWP 31516) "a.out" main._omp_fn.0 () at x.c:9
* 3    Thread 0x2aaaabcb1700 (LWP 31517) "a.out" main._omp_fn.0 () at x.c:9
  4    Thread 0x2aaaabeb2700 (LWP 31518) "a.out" main._omp_fn.0 () at x.c:9
(gdb) thread 1
[Switching to thread 1 (Thread 0x2aaaaaaebb40 (LWP 31287))]
#0  main._omp_fn.0 () at x.c:9
9           printf("%d\n",m_a); //breakpoint set here
(gdb) info locals
m_a = 0
a = 0
(gdb) thread 2
[Switching to thread 2 (Thread 0x2aaaabab0700 (LWP 31516))]
#0  main._omp_fn.0 () at x.c:9
9           printf("%d\n",m_a); //breakpoint set here
(gdb) info locals
m_a = 1
a = 0
(gdb)
...