gfortran4.4とintel11.1の両方を使用して、いくつかのモジュールを含むFortranコードをコンパイルし、その後、gdbとDDTの両方を使用してデバッグを試みました。いずれの場合も、モジュールで宣言されている変数の値を確認できません。コードは引き続き正しく実行されるため、これらのグローバル変数には値がありますが、デバッガーで値が何であるかを確認できません。ローカル変数は問題ありません。オンラインの他の場所でこの問題の解決策を見つけるのに苦労したので、簡単な解決策はないかもしれませんが、グローバル変数の値が表示されない場合、コードをデバッグするのは非常に困難になります。
5882 次
3 に答える
6
新しい GDB (私の記憶が正しければ 7.2) では、モジュールのデバッグは簡単です。次のプログラムを実行します。
module modname
integer :: var1 = 1 , var2 = 2
end module modname
use modname, only: newvar => var2
newvar = 7
end
次のコマンドを実行できます。
$ gfortran -g -o mytest test.f90; gdb --quiet ./mytest
Reading symbols from /dev/shm/mytest...done.
(gdb) b 6
Breakpoint 1 at 0x4006a0: file test.f90, line 6.
(gdb) run
Starting program: /dev/shm/mytest
Breakpoint 1, MAIN__ () at test.f90:6
6 newvar = 7
(gdb) p newvar
$1 = 2
(gdb) p var1
No symbol "var1" in current context.
(gdb) p modname::var1
$2 = 1
(gdb) p modname::var2
$3 = 2
(gdb) n
7 end
(gdb) p modname::var2
$4 = 7
(gdb)
于 2012-04-23T09:50:26.813 に答える
3
gdb で、__ modulename __ variablenameのような名前でグローバル変数を参照してみてください
nm と grep を使用して、プログラムのシンボルでグローバル変数の 1 つを見つけると、これが正しいマングリング スキームであることを確認できます。
それでもうまくいかない場合は、最新バージョンの gdb を使用していることを確認してください。
この問題に関するスレッドは次のとおりです: http://gcc.gnu.org/ml/fortran/2005-04/msg00064.html
于 2012-04-22T02:03:38.077 に答える