• 締切済み

混合言語のデバッグ(VC++6.0,VF6.0)

VCからFORTRANのサブルーチンを呼び出すプログラムを作ったのですが、FORTRANサブルーチンの変数がWATCHできなくて困ってます(DEBUG WINDOW→変数で表示されない)。どなたかアドバイスをお願いします。ちなみにサブルーチンの戻り値、参照値は正常です。

  • fpot
  • お礼率100% (1/1)

みんなの回答

  • mrt136
  • ベストアンサー率35% (33/92)
回答No.1

私はFORTRANの事は知らないのですが、デバッガで変数がWATCH出来ないのなら、 標準出力か何かに書き出せばどうですか? 昔、今ほどデバッガの性能が良くないころは、ほとんどが標準出力に書き出して (1行毎にprintf()等)してデバッグするような感じでした。 今でも、どうしても止める事が出来ない場合は、この方法を使っていますよ。 かなり原始的ですが。。。

fpot
質問者

お礼

ご回答ありがとうございます。やはりそれしかないんですかね。 VC++からFORTRANのコードを呼び出すのは初めてなので引数が正確に渡されているか確認する事が主たる目的でした。CとFORTRANでは配列の行と列が逆になるなどという事もありますし。 今回使用したサブルーチンは引数が45でそのうち12個が3*40の2次元配列であるため、引数が正確に渡されているか等、簡易に確認したかったのですが、結局全部、ファイル出力しました。

関連するQ&A

  • VC++ 高速演算コードの沢山の変数の宣言方法

     【VC++ 高速演算コードの沢山の変数を、どのように宣言すべきでしょうか?】  今日は、質問させていただきます。 もしお詳しい方がいらっしゃいましたら、 どうぞよろしくお願いいたします。  Fortranのコード(歴10年程度)を、VC++2010(歴3ヶ月程度)になおそうとしております。  ボリュームのある数値解析のコード(3000行程度ございます)を、見やすくするために、 数百行ずつでサブルーチン化したい次第でございます。    例)int main(){                ←変数の宣言場所         definition()         calculation1()         calculation2()         calculation3()         conclusion()      }  しかしmainの最初(上記「変数の宣言場所」)にまとめて宣言しております変数が200個以上ございまして、これらの半分近くを各々のサブルーチンに毎回渡そうといたしますと、引数の量が膨大になってしまいますし、 またサブルーチン内で何か追記する度に引数を追加・削除せねばなりませんので、出来れば避けたい次第でございます。  そこで「全てPublicで宣言してしまおうかな?」などと考えて検索しておりましたが、「できる限りPublic変数を宣言すべきでない」といったような記事もございましたので、悩んでおります。 (Fortran環境下では、ヘッダファイル内のPublic変数を、全サブルーチンで毎回呼び出しておりましたが、それも良くないのかな、と迷っております。)  あと、上記のような宣言方法や参照方法が計算速度に影響するものなのかどうか分からないのでございますが、 平均で10日間程度まわし続けるプログラムになりますので、出来る限り「高速化」を優先したい次第でございます。  変なご質問かもしれませんので大変恐縮でございますが、 是非アドバイスいただけないでしょうか。(書物やサイトをご紹介いただけるのでも結構でございます)  何卒よろしくお願いいたします。

  • VC6.0のデバッグで1つ以上のブレイクポイントが

    VCのサンプルプログラムをデバッグしようとしています。 デバッグ開始を実行すると、exeにデバッグ情報がありません。と表示され、 その後、ひとつ以上のブレイクポイントが設定できませんでした。と表示されます。 プロジェクトの設定でWin32 DEBUGを設定 ビルドメニューのアクティブな構成もWin32 Debug を選択していて、リビルド、コンパイルしています。 別のプロジェクトだと、うまくいくのですが・・・ ブレイクポイントの設定位置も問題ないかと思うのですが、 どなたか、お心当たりございましたら、よろしくお願いします。

  • FORTRANとC++の連動について

    私は,Fortranを用いて解析の業務をしている,プログラム初心者です。 購入したのは,Intel Visual Fortran8.0(VF)ですが,Windows環境でコンパイルリンクするには,Microsoft Visual C++ .NET 2003(VC++)が必要ということで,こちらも購入しました。 普段は,Fortranのコンソールで ifort **.f といったコマンドでコンパイルリンクし,実行しているだけです。 これからは,VC++の方に移行していきたいと考えていますが,しばらくはFortranで作成したサブルーチンを有効活用したと考えています。 そこで,VC++ベースのメインプログラムからFortranのサブルーチンを呼び出すプログラムの作成方法,コンパイルリンク方法をご教授ください。よろしくお願いします。 (1)ソースにどう記述するか? void CMyDlg::OnBnClickedOk() { ここで,FORTRANのサブルーチンを呼び出したい。     Fortranなら call subroutine( a, b ) } (2)コンパイルするときは, Visual Studio開発環境で,コンパイル→実行で良いのか? それとも,あらかじめVC++とVFで.objファイルを作成する必要があるのか?

  • FortranをC++(VC++)へ変換

    FortranをCまたはC++へ変換したいと考えています。 f2cを使うと、一応変換は行ってくれるものの、出来あがったCのプログラムをコンパイルする際、fortranのライブラリを参照する必要があるなどの制約が生じてしまいます。 VC/VC++に対応したプログラムソースへ変換するツールをご存知ないでしょうか? また、今だと、VC#まで変換してくれるツールがあると非常に便利なのですが・・・ 大量のソースコードを変換する必要があり、変換時のミスなどを考えるとツールで機械的に変換する方法を探しています。

  • 【デバッグ】変数の値が変わるとブレーク、ある値になったときにブレーク

    VC++2005で、ウオッチウインドウに変数を表示させる方法はわかりますが、ある変数の値が変わったりとか、ある値になったときにブレークする機能ってあるのでしょうか? ※昔、何かの開発ツールでそのような機能を見たことがあったので・・・

  • VC++6で作成したDLLをVC++.NET2003から呼び出せますか

    現在、VC++.NET2003で作成しています。あるメーカから提供されているDLLがあるのですが、そのDLLとのリンクまではできたのですが、実行するとエラーになってしまいます。 (プログラムが異常終了するのではないのですが、そのDLLからの戻り値がエラーになり、期待した結果が得られません。) そのDLLはVC++6で作成したものらしく、マニュアルには、VC++6で作成したアプリケーションからの呼び出し方法が、記述されていました。 VC++6でアプリを作成すれば、正常に呼び出せることは明白なのですが、いかんせん、VC++.NET2003での開発が、ある程度進んでしまっていますので、いまからVC++6に切り替えるわけにもいきません。 それで、一般論として、確認したいのですが、VC++6で作成したDLLをVC++.NET2003で使用することは、出来ないのでしょうか。(これから、メーカにも確認する予定ですが、まずは、こちらで確認したく、投稿した次第です)

  • VC++でのプログラム実行中に変数の数値を確認する方法

    VC++でのプログラム実行中に変数の数値を確認する方法 VC++でプログラムを実行している間に、変数の中の数値がどのように変化するかを表示させるためにはどのような機能があるのでしょうか? 思いつくのは次の2つなのですが、具体的な方法が分かりません。 ご存知方がいたら教えてください。 ?ソースの中に特定の表示名令文を書いておく ?VC++の機能を使って変数の中身を表示させる

  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。

  • Perlです。サブルーチンについて

    以下の文はあっていますでしょうか。 # サブルーチンを呼び出して引数は 3 とする。 # そして返ってきた戻り値を変数$aに代入せよ。 $a=&a(3); # サブルーチン名aせよ。 sub a{ # $_[0]が引数 3 となりプラス1して変数$bに代入せよ。 $b=$_[0]+1; # 変数$bの内容を戻り値として返せ。 return $b; } # 変数$aの内容を表示せよ。 print "$a";

    • ベストアンサー
    • Perl
  • DirectX8 & VC++ ビルドできない!

    今、「DirectX8&VC++」という本を使ってそこに書いてあるプログラムをうつしてビルドしようとしたのですが、 --------------------構成: kihon2_3 - Win32 Debug-------------------- リンク中... kihon2_3.obj : error LNK2001: 外部シンボル ""long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)" は未解決です Debug/kihon2_3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー kihon2_3.exe - エラー 2、警告 0 というエラーが出てしまいました。 VC自体使い慣れていないのでどんなエラーかも理解できません。 よろしければご存知の方がいれば教えてもらえないでしょうか? お願いします。