Fortran MEX ファイルのデバッグ
デバッグに関するメモ
この例では、matlabroot
/extern/examples/refbook
フォルダー内にある timestwo.F
をデバッグする方法について説明します。
-g
オプションを指定してビルドされたバイナリ MEX ファイルは、MATLAB® ソフトウェアでは配布されないファイルに依存しているため、他のコンピューターでは実行されません。MEX ファイルに関する問題の分離の詳細については、MATLAB (MEX ファイル) から呼び出せる C 関数の記述にあるトラブルシューティングを参照してください。
Microsoft Windows プラットフォームでのデバッグ
任意のバージョンの Intel® Visual Fortran コンパイラを使ってコンパイルした MEX ファイルでは、ご使用のバージョンの Microsoft® Visual Studio® に備わっているデバッグ ツールを使用できます。
Linux プラットフォームでのデバッグ
MATLAB でサポートされている Fortran コンパイラ g95 には、デバッグ情報をもつバイナリ MEX ファイルをビルドするための -g
オプションがあります。このようなファイルは、GNU® デバッガー gdb で使用できます。この節では、gdb の使用方法について説明します。
GNU デバッガー gdb
この例では、MATLAB コマンドの前に MATLAB コマンド プロンプト >>
が表示されますが、linux>
は Linux® プロンプトを表しています。システムによりプロンプトが異なる場合があります。デバッガーのプロンプトは、<gdb>
です。
ソース MEX ファイルをコンパイルするには、以下を入力します。
linux> mex -g timestwo.F
Linux プロンプトで、
matlab
-D
オプションを使用して、gdb デバッガーを起動します。linux> matlab -Dgdb
-nojvm
起動フラグを使用して、Java® 仮想マシン (JVM®) を使用せずに MATLAB を起動します。<gdb> run -nojvm
MATLAB で関数
dbmex
によるデバッグを有効にして、バイナリ MEX ファイルを実行します。>> dbmex on >> y = timestwo(4)
デバッグを開始することができます。
ゲートウェイ ルーチンの先頭で停止するように、
mexFunction
でブレークポイントを設定すると便利です。メモ
コンパイラにより関数名を変更することがあります。たとえば、アンダースコアを追加することがあります。このシンボルが特定の MEX ファイルでどのように表示されるかを確かめるには、Linux のコマンド
nm
を使用します。以下に例を示します。linux> nm
timestwo.mexa64
| grep -i mexfunctionオペレーティング システムは以下の情報を返します。
0000091c T mexfunction_
ブレークポイント ステートメントでは
mexFunction
を使用します。大文字と小文字は区別してください。<gdb> break mexfunction_ <gdb> continue
いずれかのブレークポイントに達した時点で、デバッガーのすべてのコマンドを使用した変数の確認、メモリの表示、レジスタの検査が可能です。
ブレークポイントから先に進むには、
continue
と入力します。<gdb> continue
最後のブレークポイントで停止後、以下を入力します。
<gdb> continue
timestwo
が終了し、MATLAB に以下のように表示されます。y = 8
MATLAB プロンプトで以下を入力して、デバッガーに制御を返します。
>> dbmex stop
または、MATLAB の実行を終了する場合は、以下を入力します。
>> quit
デバッガーの使用が終了したら、次のように入力します。
<gdb> quit
Linux プロンプトに戻ります。
デバッガーの使用方法の詳細は、デバッガーのドキュメンテーションを参照してください。