
Ubuntu日本語フォーラム

ログインしていません。
dddでFortranのプログラム(ファイル名.f90とファイル名.fが混在しています)を見ると常に
A syntax error in expression, rear <0x804be7c>
のメッセージが出て(hex_addressのアドレスはdddのカーソルが変わるたびに変化していきます)
何がエラーなのか、で、このアドレスからどうやって問題の解決してよいかわからず困っております。
また、同じような問題が英語のHPで発見できました。一体何のことか無知のためついていけません。。。
https://bugs.launchpad.net/ubuntu/+source/ddd/+bug/594883
どなたがご存知の方アドバイスを頂ける幸いです。(あまり詳しくないので噛み砕いて説明して頂けると助かります。。。)
オフライン
こんにちわー
ddd が Machine Code ウィンドウに逆アセンブルした機械語を表示させるためにバックエンドの gdb で
disassemble <from> <to>
というコマンドを実行しましたが gdb は
<from> と <to> の間にカンマ "," が無いのは構文エラーです
と返してきましたということかな
そのため Ubuntu の元ネタである Debian では ddd パッケージに「カンマ付きで gdb を実行する」修正が入りました
それを受けて Ubuntu の ddd パッケージの方は
11.10~: 修正が反映されたパッケージが来ています
~11.04: 今のところ来ていません(つかたぶん来ない…)
他には影響が無いと思うので逆アセが必要なければ Machine Code ウインドウを表示しないか無視していただいて構いません
オフライン
favicon.icoさん
返信が遅れてすみませんでした。そしてどうも有難うございます。まったく未知の領域ですがとりあえずmachine code windowsを無視してみます。
あと、気になるのがdddの中の矢印→が通常ならstepやnextをすると関数でないところでは上から順番に移動していきますが、なぜか一旦上に上がってまた下に戻る動きをします。もちろんコンパイルにも成功していますに計算もあっているようなのですが、なんとかく気持ち悪い動きです。プログラムに何かしらの致命的なエラーがあるかもしれませんが。。。
そのような挙動をご覧になられたことはありますでしょうか?
重ね重ねすみません。
オフライン
こんにちわー
なぜか一旦上に上がってまた下に戻る動きをします
何か規則性があるでしょうか?たとえば特定のプログラムの同じ場所でのみ起こるとか
そうであればそのプログラムとコンパイル時のオプションを提示いただければ判る方がいるかもしれません
ウィンドウがスクロールするときだけ起こるのであれば PC のグラフィック chip が非力でウィンドウ内を描画する様子が見えてしまうとあるいはそういうふうに見えるかもしれません
規則性が無いようだと動作時の画面を見てみないとちょっと難しいかもです
では~~~
オフライン
favicon.icoさん
お返事有難うございます。矢印の規則性を見つけようとしましたがどうも不規則な感じでわからず、もしかするとコンパイルはできているものの何か問題が残っているのではないかと思い、以下にmakeをした時のメッセージを添付しました。
使用しているマシンは64bitなのでそれに対して警告がでているのでしょうか。。。もしかするとそれが根本の原因ではないかと勝手に想像しております(以下の!!!! の行の警告がそれかなと思っているのですが。。。)
すみません。アドバイス頂ければ助かります。
==============================
mypc@ubuntu$ make clean
mypc@ubuntu$ make
上側は長いので省略。。。
...
...
...
Warning: Unused dummy argument 'na' at (1)
gcc -c -O3 -g -Wall -I/usr/include makcrs.f90
makcrs.f90:63.37:
integer,allocatable :: irel3(:),irel4(:)
1
Warning: Unused variable 'irel3' declared at (1)
makcrs.f90:38.35:
ijk, mpid, mele, ncp, mdof, &
1
Warning: Unused dummy argument 'mpid' at (1)
gcc -c -O3 -g -Wall -I/usr/include slusol.f
gcc -O3 -DAdd_ -I/home/jkato/Codes/SuperLU_4.1/SRC -c c_fortran_dgssv.c
c_fortran_dgssv.c: In function \u2018c_fortran_dgssv_\u2019:
c_fortran_dgssv.c:131:15: warning: cast from pointer to integer of different size !!!!
c_fortran_dgssv.c:144:14: warning: cast to pointer from integer of different size !!!!
c_fortran_dgssv.c:160:14: warning: cast to pointer from integer of different size !!!!
gcc -c -O3 -g -Wall -I/usr/include crscgm.f
gcc -c -O3 -g -Wall -I/usr/include bcgcrs.f
Linking ...
'SOLID' make done.
================================
オフライン
こんにちわー
使用しているマシンは64bitなのでそれに対して警告がでているのでしょうか。。。もしかするとそれが根本の原因ではないかと勝手に想像しております(以下の!!!! の行の警告がそれかなと思っているのですが。。。)
該当ソースの13-15行あたり
/* kind of integer to hold a pointer. Use int.
This might need to be changed on 64-bit systems. */
typedef int fptr; /* 32-bit by default */
とありますが修正していないと
131行目: *f_factors = (fptr) LUfactors;
で 64bit のアドレスを fptr (=int) にキャストして代入することになるので Warning になっていますね
(64bit だとsizeof(int)=4 sizeof(int *)=8 だったかな?)
この関数の呼び出し側の手当ても必要になりますね
あと最適化オプションですがデバッグ中は -O3 を -O0 まで落としたほうがいいかもです
カーソルの挙動の件はちょっとわからないです ごめんなさい
オフライン
favicon.icoさん
いろいろ調べて頂いて有難うございました.
それで、SuperLU4.1のソースを使用していますが、自分の使っているソースを見ると
/* kind of integer to hold a pointer. Use int.
This might need to be changed on 64-bit systems. */
typedef long long fptr; /* 64-bit by default */
となっており、64bitに対応しているように思われます。。。
どうすればよいか全く見当がつかず。。。もし、気になるところがありましたらアドバイス頂ければありがたいです。
すみません。。。
オフライン
favicon.icoさん
あれから、違うインプットデータを用いてdddデバッガで逐次確認していくと、デバッガの矢印→は安定して順番に下の方に下がっていくことが確認され、関数c_fortran_dgssvのところで計算が止まってしまうことを確認しました。
結局のところ、この部分に問題があるものと思われます。
私の使用しているSuperLu4.1(64bit)の前のバージョンにSuperLu3.0(32bit用)というフリーのソルバーには、libsuperlu.so.3.0.0とかいうライブラリがあるのですが、4.1の方ではこれがなく、libusuperli.so.4.1.0(?)のようなライブラリがあれば問題が解決するのではと思っておりますが、それがネットで探しても見当たりません。。。4.1のバージョンに3.0.0のライブラリを併用しているのが問題ではないかと思います。
とにかく私には未知の世界です。。。
オフライン
こんにちわー
インクルードファイルとライブラリのバージョンの整合性が取れているのなら問題は出ない気がします
SuperLU をソースからインストールされたのでしたら
/home/jkato/Codes/SuperLU_4.1/lib ディレクトリに出来ているはずの静的ライブラリ libsuperlu_4.1.a が使えませんか?
SuperLU_4.1 で通すのでしたらインクルードファイルのパスも上記に準じた場所になっていますか?
とにかく私には未知の世界です
タイトルの件から外れそうなのでこの件はこのあたりで失礼します
では~~~
オフライン