Можно ли установить точки останова данных в GDB для отслеживания изменений глобальной переменной в Fortran исполняемом файле?
Мотивация
Я пытаюсь выяснить, откуда неожиданное изменение глобальной переменной конфигурации. Решения, основанные на исходном коде, еще не раскрыты, где может произойти любое назначение, поэтому я пытаюсь использовать GDB. Но хотя я легко могу установить точки останова для вызовов подпрограмм с помощью readline-завершение, а затем распечатать глобальные и локальные переменные, которые находятся в области видимости, я не могу понять, как установить точки останова для изменений данных.
I не удалось установить точки прерывания данных для исполняемого файла, созданного с помощью GFortran и Intel Fortran. Также не помогает, что документация Intel для точек прерывания данных охватывает только Windows.
Пример
В целях тестирования я использую следующую настройку:
! persons.f90
module mperson
implicit none
type :: person
integer :: age = 0
character(16) :: name
end type person
type(person), allocatable :: persons(:)
contains
subroutine init_persons(ages, names)
integer, intent(in) :: ages(:)
character(*), intent(in) :: names(:)
integer iPerson
allocate(persons(size(ages)))
do iPerson = 1, size(ages)
persons(iPerson) = person(ages(iPerson), names(iPerson))
end do
end subroutine init_persons
subroutine print_persons()
integer iPerson
print '("-------- print_persons --------")'
do iPerson = 1, size(persons)
print *, persons(iPerson)
end do
persons(2) = person(-1, "undefined") ! <-- This I would like to catch.
end subroutine print_persons
end module mperson
program main
use mperson
implicit none
call init_persons([18,42,13], [character(16)::'Alex', 'Max', 'Bobby Tables'])
call print_persons()
call print_persons()
contains
end program main
Отлажено с помощью:
(bash) ifort -g -traceback persons.f90 -o persons.bin
(bash) gdb persons.bin
(gdb) break persons.f90:main
(gdb) run