Main Content

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> です。

  1. ソース MEX ファイルをコンパイルするには、以下を入力します。

    linux> mex -g timestwo.F
  2. Linux プロンプトで、matlab -D オプションを使用して、gdb デバッガーを起動します。

    linux> matlab -Dgdb
    
  3. -nojvm 起動フラグを使用して、Java® 仮想マシン (JVM®) を使用せずに MATLAB を起動します。

    <gdb> run -nojvm
  4. MATLAB で関数 dbmex によるデバッグを有効にして、バイナリ MEX ファイルを実行します。

    >> dbmex on
    >> y = timestwo(4)
  5. デバッグを開始することができます。

    ゲートウェイ ルーチンの先頭で停止するように、mexFunction でブレークポイントを設定すると便利です。

    メモ

    コンパイラにより関数名を変更することがあります。たとえば、アンダースコアを追加することがあります。このシンボルが特定の MEX ファイルでどのように表示されるかを確かめるには、Linux のコマンド nm を使用します。以下に例を示します。

    linux> nm timestwo.mexa64 | grep -i mexfunction

    オペレーティング システムは以下の情報を返します。

    0000091c T mexfunction_

    ブレークポイント ステートメントでは mexFunction を使用します。大文字と小文字は区別してください。

    <gdb> break mexfunction_
    <gdb> continue
  6. いずれかのブレークポイントに達した時点で、デバッガーのすべてのコマンドを使用した変数の確認、メモリの表示、レジスタの検査が可能です。

    ブレークポイントから先に進むには、continue と入力します。

    <gdb> continue
  7. 最後のブレークポイントで停止後、以下を入力します。

    <gdb> continue

    timestwo が終了し、MATLAB に以下のように表示されます。

    y =
    
         8
  8. MATLAB プロンプトで以下を入力して、デバッガーに制御を返します。

    >> dbmex stop

    または、MATLAB の実行を終了する場合は、以下を入力します。

    >> quit
  9. デバッガーの使用が終了したら、次のように入力します。

    <gdb> quit

    Linux プロンプトに戻ります。

デバッガーの使用方法の詳細は、デバッガーのドキュメンテーションを参照してください。

関連するトピック