Main Content

Mac プラットフォームでのデバッグ

Xcode の使用

この例では、Xcode を使用して yprime MEX ファイルをデバッグする方法を説明します。

ソース MEX ファイルのコピー

yprime.c ソース コードは matlabroot フォルダーにあります。MATLAB® で、/Users/Shared/work などの書き込み可能なローカルのフォルダーにそのファイルをコピーします。フォルダーが存在しない場合は作成し、MATLAB で現在のフォルダーとして設定します。

workdir = fullfile('/','Users','Shared','work');
mkdir(workdir)
copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),workdir)
cd(workdir)

ソース MEX ファイルのコンパイル

-g オプションを指定してソース MEX ファイルをコンパイルすると、デバッグ シンボルが追加されます。MATLAB でバイナリ MEX ファイル yprime.mexmaci64 が作成されます。

mex -g yprime.c

デバッグ用の空の Xcode ワークスペースの作成

Xcode で以下を行います。

  • [File][New][Workspace] を選択します。

  • ファイルの選択ダイアログ ボックスで、ワークスペースの名前を [Save As] フィールドで debug_yprime に設定します。

  • ワークスペースを格納する /Users/Shared/work フォルダーを選択します。フォルダーを選択するにはフォルダーまで移動するか、Command+Shift+G キーボード ショートカットを使って [Go to the folder] メニューを切り替え、絶対パス /Users/Shared/work を入力します。

  • [Save] をクリックします。

Xcode ワークスペースへの yprime ファイルの追加

  • yprime.c ファイルをワークスペースに追加するには、Finder の /Users/Shared/work フォルダーから Xcode ワークスペース ウィンドウの左側にあるナビゲーター列までドラッグします。

  • [Destination] オプションの Copy items into destination group's folder (if needed) をオフにします。このオプションをオフにすると、MATLAB で実行するファイルにブレークポイントを追加できるようになります。

  • ファイルを追加するには、[Finish] をクリックします。

スキームの作成

  • [Product][Scheme][New Scheme...] を選択します。

  • [Target]None に設定したままにします。

  • [Name]debug に設定します。

  • [OK] を押します。スキームの編集用ダイアログ ボックスが開きます。

  • [実行][Info][Executable] オプションを [Other] に設定します。ファイル選択ウィンドウで Command+Shift+G キーボード ショートカットを使って、[Go to the folder] メニューを切り替えます。絶対パスを MATLAB アプリケーション バンドル内の MATLAB_maci64 実行可能ファイルに指定します。絶対パスの例は、/Applications/MATLAB_R2016a.app/Contents/MacOS/MATLAB_maci64 のようになります。

  • [Wait for executable to be launched] を選択します。

  • [閉じる] をクリックします。

シンボリック ブレークポイントの追加

  • [Debug][Breakpoints][Create Symbolic Breakpoint] を選択します。

  • [Symbol]NSApplicationMain に設定します。

  • [Add action] をクリックして、次のデバッガー コマンドを追加します。

    process handle -p true -n false -s false SIGSEGV SIGBUS
  • ブレークポイント エディター ペインが表示されなくなった場合、新しいブレークポイントを右クリックし、[Edit Breakpoint…] を選択して表示します。

  • [Automatically continue after evaluating actions] をオンにします。

MEX ファイルでのブレークポイントの設定

  • [View][Navigators][Show Project Navigator] を選択します。

  • ナビゲーター列で yprime.c をクリックします。

  • mexFunction() の最初の行など、実行を一時停止する行の横にあるガターをクリックします。

  • 詳細については、Xcode のドキュメンテーションを参照してください。

Xcode デバッガーの起動と MATLAB の実行

  • デバッガーを起動するには、Xcode[製品][実行] を選択します。または、ワークスペース ウィンドウの左上隅にある三角形のアイコンの付いた [実行] ボタンをクリックします。

  • XcodeWaiting for MATLAB to launch というメッセージがワークスペース ウィンドウの最上部に表示されるまで待機します。この操作は数秒間かかる場合があり、特に、この手順をはじめて使用する場合にこれが該当します。

  • MATLAB 実行可能ファイルを Mac ターミナルのプロンプト (ターミナル ウィンドウからの起動を参照) または Finder から起動します。MATLAB が既に実行されている場合、ドックの MATLAB アイコンを右クリックして [別の MATLAB インスタンスを開く] を選択します。

  • XcodeRunning MATLAB: debug というメッセージが表示されます。

MATLAB でのバイナリ MEX ファイルの実行

この新しい MATLAB のインスタンスでは、現在のフォルダーを yprime ファイルがあるフォルダーに変更して MEX ファイルを実行します。

workdir = fullfile('/','Users','Shared','work');
cd(workdir)
yprime(1,1:4)

Xcode デバッガーは、yprime.c の最初のブレークポイントで停止します。

この時点でコードのステップ実行や変数の検証などを行うことができますが、この演習では [Debug] メニューで [Continue] を選択します。yprime の実行が終了すると、MATLAB で以下が表示されます。

ans =

    2.0000    8.9685    4.0000   -1.0947

この MATLAB のインスタンスが実行されている限り MEX ファイルを繰り返し実行することができ、Xcode は設定されたブレークポイントで停止します。

LLDB の使用

LLDB は、macOS システムの Xcode で使用できるデバッガーです。デバッガーの使用方法の詳細は、デバッガーのドキュメンテーションを参照してください。

この手順では、>> は MATLAB のコマンド プロンプトを示し、%Mac ターミナルのプロンプトを表します。デバッガーのプロンプトは、(lldb) です。

JVM を使用しない MEX のデバッグ

この例では、Java® Virtual Machine (JVM™) を使用せずに MEX ファイル yprime をデバッグします。MATLAB をこのモードで実行すると、メモリ使用量が最小化されて初期起動がスピードアップしますが、機能は制限されます。たとえば、デスクトップは使用できなくなります。

  1. -g オプションを指定してソース MEX ファイルをコンパイルします。これで、デバッグ シンボルがインクルードされたファイルがビルドされます。端末のプロンプトで次のコマンドを入力します。

    % mex -g yprime.c
  2. 関数 matlab-D オプションを指定して、lldb デバッガーを起動します。

    % matlab -Dlldb
    
  3. -nojvm 起動フラグを使用して、MATLAB を起動します。

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

    >> dbmex on
    >> yprime(1,1:4)

    デバッガーはユーザー定義信号をトラップし、プロンプトが lldb に戻ります。

  5. デバッグを開始することができます。

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

    (lldb) b mexFunction
    
  6. ブレークポイントに達した後、デバッガーの任意のコマンドを使用して、変数の確認、メモリの表示、レジスタの検査ができます。以下を入力してブレークポイントから先に進みます。

    (lldb) c
  7. 最後のブレークポイントで停止後、以下を入力します。

    (lldb) c

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

    ans =
    
        2.0000    8.9685    4.0000   -1.0947
    
  8. MATLAB プロンプトで次のコマンドを入力して、デバッガーに制御を返します。

    >> dbmex stop

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

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

    (lldb) q

    端末のプロンプトに戻ります。

JVM を使用した MEX のデバッグ

JVM を使用して MEX ファイルをデバッグするには、まず SIGSEGV および SIGBUS のプロセス信号を処理します。MATLAB を起動し、最初の命令で停止します。

  • 端末のプロンプトから MEX ファイルをコンパイルし、lldb デバッガーを起動します。

    % mex -g yprime.c
    % matlab -Dlldb
    
  • MATLAB を起動します。

    (lldb) process launch -s
  • 上記のプロセス信号が発生した時点でプロセスが続行されるように指定します。

    (lldb) process handle -p true -n false -s false SIGSEGV SIGBUS
    
  • ブレーク ポイントを設定してデバッガーの他のコマンドを実行できます。

関連するトピック