В настоящее время я отлаживаю код, написанный на фортране и скомпилированный с помощью gfortran.
У меня возникли проблемы при печати некоторых переменных с помощью gdb.
Например, когда я нахожусь внутрии я хочу напечатать переменную, которая приходит извне и имеет размер, который зависит от параметра, вычисленного в другой подпрограмме, похоже, что gdb не распознает размер матрицы и не может ее распечатать.
Ниже приведен упрощенный пример, чтобы он был понятен:
subroutine stiff(id)
implicit real*8 (a-h,o-z)
common /a/nnp
dimension id(5,nnp)
Вот некоторые результаты, которые дает gdb
(gdb) print id
$6 = ()
(gdb) whatis id
type = integer(kind=4) (5,0)
(gdb) print nnp
$7 = 15
Есть ли способ это исправить илиэто присуще способу программирования?Этот код был разработан кем-то другим и является огромным, поэтому я могу изменить весь способ объявления переменных.
Заранее благодарен за любую помощь.
edit:
См. Ниже aпростая программа (самое простое, что я мог).В целом он имеет ту же структуру, что и код, над которым я работаю, и то же поведение с GDB, которое я описал ранее.Находясь в подпрограмме ввода, я не могу напечатать переменную "id".
implicit real*8 (a-h,o-z)
dimension a(1000)
call markaz(a)
stop
end
subroutine markaz(a)
implicit real*8 (a-h,o-z)
dimension a(1000)
common /a/nnn
call dim1(l1,l2)
call input(a(l1))
return
end
subroutine dim1(l1,l2)
implicit real*8 (a-h,o-z)
common /a/nnn
print*, 'enter nnn: ';read(*,*) nnn
l1=1
l2=l1+(nnn*5+1)/2
return
end
subroutine input(id)
implicit real*8 (a-h,o-z)
common /a/nnn
dimension id(5,nnn)
do i=1,5
do j=1,nnn
id(i,j)=1.0
enddo
enddo
return
end
Вот что я получаю с gfortran 4.4.5 и gdb 7.0.1
$ gfortran -g -fbacktrace test.for
$ gdb ./a.out
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /test_print/a.out...done.
(gdb) break test.for :36
Breakpoint 1 at 0x400a7d: file test.for, line 36.
(gdb) run
Starting program: /test_print/a.out
enter nnn:
2
Breakpoint 1, input (id=...) at test.for:37
37 do i=1,5
Current language: auto
The current source language is "auto; currently fortran".
(gdb) whatis id
type = integer(kind=4) (5,0)
(gdb) print id
$1 = ()
(gdb) print nnn
$2 = 2
(gdb)