掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB,VC++にまたがるプログラムで,データの値を追跡(いわゆるデバッグ)する方法を教えて下さい. (ID:55048)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
KING・王さん,シャノンさん,あいうさん,貴重なアドバイ スをどうも有難うございます.長文で申し訳ありませんが,以下の ように報告させていただきます. 混合モードのウインドウにアセンブラが出たときはどうしようか と思いましたが,VC++のソース中にブレークポイントを入れること で,混合モードのアセンブラ中にVC++のコードが表示されるほか, ソースコードでもその進行状況が示されることが分かりました. デバッグを行った結果,「ハンドルされていない例外は FFTW.exe(FFTW3.DLL)にあります:0xC0000005:Access Violation。」 という表示は,FTTW.cppとして作成したファイルの以下の部分で生 じていることが分かりました.fftw_executeは目的にそったフーリ エ変換を行わせる関数部分で, http://www.fftw.org/install/windows.htmlからダウンロードした FFTW3.DLLに含まれているものです. 35: fftw_execute(p); /* repeat as needed */ ●100010BF mov ecx,dword ptr [ebp-0Ch] 100010C2 push ecx 100010C3 call fftw_execute (1000113e) 100010C8 add esp,4 上記関数はVBから呼び出された, FFTW_API void __stdcall dft_1d(int n, fftw_complex *FFTWin, fftw_complex *FFTWout, int sign) の中の関数ですが,実際にVBから正しく値を受け取っているか,変 数の値を追跡してみました.呼び出し元はVB中で, Call dft_1d(i - 1, FFTin(0), FFTout(0), FFTW_FORWARD) と書かれています. まず,変だったのは,VB上でi-1の値が3229であるのに対し,値 を受け取った,VC++側のnは1242172という値になっていました.さ らに,VB上ではFFTW_FORWARD=-1にも関わらず,VC++のsignは17367072 となっていました. つまり,まず,第一の問題としてVBからVC++へ値の受け渡しがう まくいっていないことが挙げられると思います. また,プログラムが停止した場所でコールスタックを出すと FFTW3! 014595b1() baadf00d() のように表示され,ダブルクリックすことにより, 014595B1 fld qword ptr [edx+esi] で停止していることが分かりました. デバッグ中にコールスタックを開こうとすると,「問題が発生し たため,msdev.exe を終了します。ご不便をおかけして申し訳あり ません。」というメッセージが出て,VC++のワークスペース全てが 落ちてしまいました.そしてその後,「msdev.exe - アプリケー ションエラー - "0x7c950de3"の命令が"0xfffffff8"のメモリを参 照しました。メモリが"read"になることはできませんでした。」と なりました.これは一体どういうことなのでしょうか.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.