отладка выделяемого массива gfortran с помощью gdb в Mac OS X - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь отладить программу на фортране, которая использует выделяемые массивы на OS X El Capitan (10.11.6).Программа скомпилирована с gfortran (GNU Fortran (GCC) 8.1.0), и я использую gdb (GNU gdb (GDB) 8.1).И gfortran, и gdb были построены из источника (инструкции: gfortran , gdb ).Моя проблема в том, что gdb неправильно распознает / отображает размещаемые массивы.

Это старая и известная проблема , которая, похоже, была исправлена ​​в последних дистрибутивах Linux.Поэтому я подозреваю, что это проблема только на OS X.Далее я покажу минимальный, полный и проверяемый пример.

Проблема

Тестовая программа под названием test.f90:

program ex
  implicit none
  integer, parameter :: dp = kind(1.d0)
  integer :: i
  real(kind=dp),allocatable :: tab(:)
  real(kind=dp) :: tab2(10)
  allocate(tab(1:10))
  do i=1,10
     tab(i)=real(i,kind=dp)
     tab2(i)=tab(i)
  end do
  write(*, '(*(f3.0,1x))') tab
  write(*, '(*(f3.0,1x))') tab2
end program ex

Скомпилировано с использованием:

gfortran -g test.f90 -o test

Вызов gdb для исполняемого файла:

gdb ./test
(gdb) b test.f90:12
(gdb) run
(gdb) info locals
i = 11
tab = ()
tab2 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
(gdb) p &tab
$1 = (PTR TO -> ( real(kind=8) (*))) 0x7fff5fbff930
(gdb) p &tab2
$2 = (PTR TO -> ( real(kind=8) (10))) 0x7fff5fbff8e0

Обратите внимание, что размер выделяемой переменной tab не печатается / распознается правильно в GDB.

Ожидаетсярезультат

На виртуальной машине Ubuntu с gdb (GNU gdb (Ubuntu 8.0.1-0ubuntu1) 8.0.1) и gfortran (GNU Fortran (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0), компиляция и отладка с использованием тех же команд, что и выше, дают ожидаемый result:

(gdb) info locals
i = 11
tab = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
tab2 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
(gdb) p &tab
$1 = (PTR TO -> ( real(kind=8) (10))) 0x55555575a240
(gdb) p &tab2
$2 = (PTR TO -> ( real(kind=8) (10))) 0x7fffffffd7f0

Таким образом, Ubuntu, gdb правильно сообщает о размере и содержании выделяемого массива tab, идентичных tab2.Как для Ubuntu, так и OS X фактический вывод программы такой же, как и ожидалось, а именно:

./test
1.  2.  3.  4.  5.  6.  7.  8.  9. 10.
1.  2.  3.  4.  5.  6.  7.  8.  9. 10.

Что я пробовал

Есть ряд связанных вопросов, ужеэтот сайт, но ни один, который я не могу найти, предлагает работающее решение (на более недавней OS X версии, такой как El Capitan).Предыдущие предложения были:

Я не могу найти пример работающей сборки ветки Project Archer gdbна недавней версии OS X.И мои собственные усилия по созданию ветки Project Archer по-прежнему приводят к gdb, который не распечатывает правильно распределяемый массив.

Кажется, что gdb установлен из, например, homebrew также имеет эту проблему .Поэтому, если кто-нибудь может дать мне несколько советов о том, как получить или собрать версию gdb для OS X El Capitan (или более новую MacOS, если необходимо), которая может печатать размещаемые массивы из gfortran, я был бы очень признателен,В качестве альтернативы, любое объяснение того, почему это невозможно, также будет полезно.

...