GDB (intel): печатные работы, но не информационный адрес - PullRequest
0 голосов
/ 26 октября 2018

Дерево выглядит следующим образом:

module M
    type A
      real     , allocatable :: dd (:)
    end type A


    type B 
      type (A) , pointer :: aa
    end type B


    type C
     type(B) , pointer :: bb
    end type C

    type(C) , allocatable :: cc(:)

end module M

В GDB:

print M::cc(10) % bb % aa % dd(100) 
$1 = 0

Однако

info address M::cc(10) % bb % aa % dd (100) 

генерирует ошибку: без символа "cc (10)% bb% aa% dd (100) "в текущем контексте.

whatis address M::cc(10) % bb % aa% dd(100)

генерирует ошибку: не удается получить доступ к памяти по адресу 0xa0

Я вижу, что флаг компилятора" -g "должен быть указан для доступа к глобальным переменным, но это не помогло.

Причина, по которой мне нужен адрес, - watch M::cc(10) %bb % aa % dd (100) с программной точкой наблюдения, чтобы я не сильно замедлял GDB.Я надеюсь, что это даст мне представление о строках кода, которые изменяют значение dd (100).

Один вариант, который я уже исследовал, - это просто пойти дальше и установить точку наблюдения с помощью:

watch cc(10) % bb % aa % dd ( 100 ) 

Но это приводит к нескольким сотням точек наблюдения с номерами 1.1, 1.2, 1.3.... 1.500!Это действительно замедляет выполнение в GDB.

Так как я могу получить доступ к адресу?Если это невозможно, какова лучшая альтернатива?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...