• ベストアンサー

gdbでFortranの名前つきcommonブロック内の変数の表示

いまどきFortranなんてカテゴリーさえもないのですが、よろしくお願いします。 去年の暮れからLinuxを使って、Fortranで計算をしています。 質問は、Fortranの名前つきcommonブロック内のの配列変数をgbdを使ってデバッグしている時にprintコマンドで表示したいのですが、やり方がわかりません。 write文を使うというデバッグ方法には戻りたくないので、gdbで解決したいのですが、いかがなものでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

もしお使いのコンパイラが g77 であれば、ことは簡単にはいかない ようですが、方法が無いわけではなさそう。 http://www.la.utexas.edu/lab/software/devtool/gnu/g77/g77_554.html http://www.fuw.edu.pl/~pliszka/hints/c++f77.html でも、コンパイラに次第で簡単に行く場合もあるらしいです。 例えば Solaris で動くらしい Fortran90 コンパイラ NAGWare f90 Compiler では、 http://www.nag.com/doc/inun/nc21/solng_un.txt という具合に、割と普通にいけるらしい。

参考URL:
http://www.fuw.edu.pl/~pliszka/hints/c++f77.html
meiko0325
質問者

お礼

早速のご返答ありがとうございます。 こちらの環境は、Kondara 1.2で残念ながら(?)コンパイラはg77を使っています が、ご指摘いただいたHPの情報から何とかやってみたいと思っています。 ありがとうございました。

関連するQ&A

  • FORTRAN90で書式に変数を使いたい

    FORTRAN90で書式に変数を使いたい 配列aの要素数が3である場合の書き出し方は例えば、  print '(3I5)', a ですよね。 配列aの要素数がnである場合、どう書き出せばよいのでしょうか?  print '(nI5)', a だとエラーが出ます。 繰り返し文を駆使する以外にないのでしょうか?あまり美しくない気がします。

  • gdbを使ったデバッグの方法について

    Linux環境でC言語プログラムを開発している者です。 デバッグをgdbで行おうと思っているのですが、-gオプションを付けてgdb ./a.out でCの実行モジュールを使ったデバッグは行ったことはあるのですが、以下のようなshellスクリプト内で環境変数の設定を行い、設定した環境変数下で./a.out内にbreakポイントを設定するにはどうすればいいのでしょうか?ご教授お願いします。 Test.shの内容 #!/bin/sh export ftn22=’/home/test’ ./a.out Cの実行モジュール

  • リモートデバッグについて

    リモートデバッグについて質問があります。 現在、Red Hat Linux 9.0にて、C言語のプログラミングをしています。 いま作っているプログラムは、CUIの簡単なものです。 環境は以下のとおりです。  エディタ :vi  コンパイラ:gcc  デバッガ :gdb ですが、viに慣れていないのとgdbだとデバッグは全てコマンドになるので、 効率が上がらないです。(スキルも無いのですが。) そこでWindowsXPのマシンで、samba共有のソースをエディタで 編集してみると便利でした(パソコンは2台あります) ただ、コンパイルとデバッグはLinux上になってしまうので、そこから先は同じです。。。 WindowsマシンでLinuxに入っているgdbのフロントエンドみたいなことできないでしょうか? (コンパイル・実行は、Linux上で行われるけど、デバッグは、Windowsから行える) 何か、いい環境はありませんでしょうか? また可能であれば、手順等をお教えいただけますか? ※ちなみにLinuxマシンは、中古の5000円で購入したボロの為、Xウインドウを入れていないです。  なので、GUIの統合環境をLinuxマシンで使用するというのは無しでお願いします。  また、windowsマシンにcygwinを入れるというのもLinuxマシンが可哀想なので、  今回は無しでお願いします。 下記のアドレスにあるソフトを使うと私のしたいことが出来るような気がするのですが、 英語のページなので、細かいところがわかりません。。。 BVRDE http://bvrde.sourceforge.net/index.htm

  • Cygwin+GDBでターミナルの設定?

    Linux系ではないのですが、こちらには詳しい方がいらっしゃると思いますので、ここで質問させてください。 Cygwin環境でgdbを走らせてデバッグしようとしているのですが、gdb上ではTABキーによるコマンド補完や、↑キーによるコマンド履歴呼び出しができずに困っています。 bashを起動した状態のときは、bash上ではコマンド補完や履歴呼び出しはできています。 そこからgdbを起動すると補完や履歴呼び出しはできなくなります。 これは、ターミナルの設定の問題ですか?それともgdbの設定の問題ですか? 「・・・できなくなる」と書いてますが、全く利いていないわけではないようです。 gdb上で、↑キーを押すとその時点ではカーソルが上に移動するだけです。さらにもう一度↑キーを押してから(もちろん更にカーソルがもう一行上に移動する)ENTERを押すと、2つ前に入力したコマンドが実行されます。 また、同じくgdb上で、「d」とタイプしてからTABキーを2回押すと、カーソルがタブスペースの分だけ右へ2回移動するだけですが、ENTERを押すと「d」から始まるコマンドの一覧が出ます。 どうやら、ENTERを押すまではキー操作がgdbに伝わっておらず、ENTERと同時にgdbに渡されているようです。 それから、CTRL+Cで実行中のプログラムが停止しません。しばらくだんまりになったあと、gdb自体が終了します。これも、どうにかして、CTRL+Cで止まるようにしたいです。 関係ないかもしれませんが、bashのバージョンは4.1.10、gdbのバージョンは7.2です。 よろしくお願いします。

  • 変数表示コマンド

    Perlのデバッガ操作について(長文です。) 環境:Linux(Ubuntu) Perl:5.10.1 作成したPerlプログラムをデバッガスイッチをつけて起動し、デバッガを利用してのプログラム動作確認を行っております。 ※この質問に対してEmacs等を利用してのIDE操作を勧める回答は遠慮  して下さい。  当方の都合としてEmacsは利用出来ない環境にあり、CUI上でのIDEも  利用不可と言う環境です。 下記サイトを参考にしながらデバッグコマンドを試しております。 http://www.namazu.org/~tsuchiya/perl/info/perl-ja_106.html http://homepage3.nifty.com/hippo2000/perltips/perldbg.htm 下記内容についての確認方法をご存知の方いらっしゃいましたら御教示願います。 1.wコマンドの仕様(利用方法)  上記サイトでは、wコマンドを利用すると、指定した行の前後を含んだ  ソースコードを表示するとありますが・・・・  Adding a watch-expression requires an expression  と表示されます。  式がwatch-expressionを必要としている・・と訳すとしても意味がわか  りません。 2.現在実行中の行を含んだ前後のソースコードを表示させたい  上記サイトでwコマンドとして紹介されている機能を実現させるコマンド  は何なのでしょうか? 3.指定変数の値表示方法は何?  上記さ意図では編集の表示方法としてVコマンド及びxコマンドが紹介  されています。  「symbol は名前だけを示し、($ などの) 型識別子を付けないように   してください」  とありましたが、「x $value」と指定しないと値が表示されません。  (ハッシュは何が何か解るように、key と value を表示し、コント  ロール文字は表示できる形にします)  とありますが、「x %value」とすると、その ハッシュに納められ  ているアドレス値が表示されます。  ※「x value」としても期待する値は表示されません。 4.指定したハッシュ変数の内容を表示させたい  上記3と関連します。  ハッシュの全体表示を行うコマンドは何なのでしょうか。 上記4点について、識者の方のアドバイスをお願い致します。 また、Perlデバッガについての有益な情報サイトをご存知の方がいら しゃいましたら、是非御教示をお願い致します。

    • ベストアンサー
    • Perl
  • FORTRANのCOMMONについて

     最近、FORTRANについての勉強を始めたものですが いまいち「COMMON」の意味が理解出来ません。 例えば下のようなプログラムで(簡単に書きすぎてすいません)   (Aグループ)       COMMON X         X=10   (Bグループ)       COMMON Y    (UEXTERNAL)       COMMON X. Y。     WRITE X     X=10と出力されるのでしょうか? 分る範囲でいいのでお願いします。

  • gdbの変数の表示について

    gdbでプログラムにある変数の表示を行う方法で、表示されている所の変数の全ての中身を一括で表示する方法はありますか?もしくは変数、配列の中身は常に全て表示するといった事は可能なのでしょうか?

  • Fortranの並びによる出力の書式指定について

    Fortranなのですが、以下のような並びによる出力について考えます。 write(*,'( 5i2 )') (n,n=1,5) 出力結果は1 2 3 4 5 というだけのことで、2桁の整数を5個出力せよ、ということです。出力する前から5個の整数が来ることが分かっているということになります。 ところが個数が5じゃない場合、どのように書式指定すればいいでしょうか。出力する整数の個数がプログラムの実行結果によって変化する(つまり変数)ということです。よろしくお願いします。 Fortranのカテゴリがないようなので、C言語の専門家に聞くしかないと思い、こちらに上げてみました。Cだとすんなりできそうですが。

  • Fortran90/95の出力方法について

    Fortran90/95の出力方法について Fortran95において,変数の値をwrite文で出力した後に改行しない方法を教えてください. 具体的には次のProgram reiを用いて質問します. program rei implicit none integer i, n read(*,*) n do i = 1, n write(*,*) i end do end このプログラムを実行させnに3を代入すると次のように表示されます. 1 2 3 しかし,私としては次のように改行せずに表示させたいのです. 1 2 3 また,諸事情により配列は使用しません. プログラムをどのように改良すればよいのでしょうか.教えてください.

  • Segmentation Fault (メモリ制限?)

    Segmentation Fault (Fortranのプログラム)に関して質問です。 あるデータを処理するプログラムですが、小さなデータの場合問題ないですが、 大きなデータを扱うようになった場合Segmentation Faultとなります。 宣言している配列サイズを超えた部分のアクセスなどでSegmentation Faultが出ることがあるようですが、どうやらそのような現象ではなく、 メモリ制限にひっかかっている感じがいたします。 エラーが出る部分はどうやらSubroutine内の大きなデータ宣言を している部分のようです。(下の例ではtest bが表示れる以前に止まります。) !-------------------------------------------------- subroutine calc_tri( ) implicit none real*8 data1(3,200000) !<--- ここでエラー --> write(6,*) 'test b' !-------------------------------------------------- このような場合、配列データを減らす以外にどのような対策が あるのでしょうか? あるいはメモリ制限になりそうなデータ数が分る方法などあります でしょうか? 環境は linux (CentOS) intel Fortran Compiler version 8.0 Mem: 1GB topコマンドにて Memの使用割り合いは10%にもならないのですが コンパイラによるメモリ制限などもあるのでしょうか? subroutine内の配列の宣言はデータ数より多くとっていることは確認しています。

専門家に質問してみよう