Eclipse(Neon.3リリース4.6.3)とgdb 7.11.1およびgfortran 5.4.0を使用して実行ファイルをデバッグしていますローカルサブルーチン変数とシンプルな外部変数を正しく見ることができるようです。この簡単な例を考えてみましょう:グローバルアレイ/構造体はgdbでデバッグ中にアクセスできない
module ext_class
type extstruct_type
integer(kind=4), ::svar1
integer(kind=4), ::svar2
end type extstruct_type
integer(kind=4), save :: extvar
integer(kind=4), dimension(4), save :: extarray
type (extstruct_type), save :: extstruct
end
module mod
subroutine foo(invar)
use ext_class, only : extvar, extarray, extstruct
type (real::8), intent(in) :: invar
integer(kind=4) :: i
...
!Debugger breakpoint inserted here to check variable visibility
end
end
Eclipseの変数リストが正しく、彼らはモジュール/アレイのが、任意のグローバル/外部変数(extvar, extarray, extstruct
)ドン」している場合でも、ローカル変数(i
)と入力(invar
)が表示されますリストには表示されません。 「式」ビューに手動で入力しようとすると、不足しているシンボルを評価できないというエラーが表示されます。
複数のエラーが報告されました。
1)はMIコマンドの実行に失敗しました: -var-作成 - デバッガのバックエンドから* extvarエラーメッセージを: -var-作成:変数のオブジェクトを作成することができませんでし変数オブジェクトを作成できません
2)
3)MIコマンドの実行に失敗しました: -data-evaluate-expression extvarデバッガのバックエンドからのエラーメッセージ:現在のコンテキストに "extvar"というシンボルはありません。
4)はMIコマンドの実行に失敗しました: -var-作成 - デバッガのバックエンドから* extvarエラーメッセージ: は-var-作成:変数オブジェクト
を作成することができませんが、私が使用される特殊な表記法を発見しました
nm <binaryname> | grep <modulename>
は、私は、その後、一般的に次のように入力してGDBでのグローバルモジュールのメンバーを見ることができます:
コンパイラによってコマンドを使用して、バイナリ実行可能ファイルにこれらのグローバル変数を格納しますprint __<modulename>_MOD_<membername>
ただし、は、モジュールの単純なメンバータイプでのみ機能します。例えば、私が正しく整数メンバーを見ることができます:整数の静的アレイについて
print __ext_class_MOD_extvar
$1 = 0
を、それが不適切だけ従ってメンバーアレイの他の要素のいずれかを表示するから私を防止する、最初の要素を印刷:
構造タイプについてprint __ext_class_MOD_extarray
$2 = 0
print __ext_class_MOD_extarray(1:4)
Cannot perform substring on this type
、それは不適切だけ従って構造体の他のメンバーのいずれかを表示するから私を防止する、第一部材(svar1
)を印刷する:
print __ext_class_MOD_extstruct
$3 = 0
print __ext_class_MOD_extstruct%svar2
Attempt to extract a component of a value that is not a structure.
Intelコンパイラを使用しているときにうまく動作するため、gfortranではgfortranでは実際に問題が発生する可能性があります。hereを読んでいます。コンパイル時に設定する必要がある余分なフラグがありますか?私はすでに使用しています-g -O0