このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
macOS プラットフォームでのデバッグ
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 では、Apple シリコンを搭載した macOS 上でバイナリ MEX ファイル yprime.mexmaca64
が作成されます。
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_maca64
実行可能ファイルに指定します。絶対パスの例は、/Applications/MATLAB_R2023b.app/Contents/MacOS/MATLAB_maca64
のようになります。[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 で [製品] 、 [実行] を選択します。または、ワークスペース ウィンドウの左上隅にある三角形のアイコンの付いた [実行] ボタンをクリックします。
Xcode で
Waiting for MATLAB to launch
というメッセージがワークスペース ウィンドウの最上部に表示されるまで待機します。この操作は数秒間かかる場合があり、特に、この手順をはじめて使用する場合にこれが該当します。MATLAB 実行可能ファイルを Mac ターミナルのプロンプト (ターミナル ウィンドウからの起動を参照) または Finder から起動します。MATLAB が既に実行されている場合、ドックの MATLAB アイコンを右クリックして [別の MATLAB インスタンスを開く] を選択します。
Xcode で
Running 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® 仮想マシン (JVM™) を使用せずに MEX ファイル yprime
をデバッグします。MATLAB をこのモードで実行すると、メモリ使用量が最小化されて初期起動がスピードアップしますが、機能は制限されます。たとえば、デスクトップは使用できなくなります。
-g
オプションを指定してソース MEX ファイルをコンパイルします。これで、デバッグ シンボルがインクルードされたファイルがビルドされます。端末のプロンプトで次のコマンドを入力します。% mex -g yprime.c
関数
matlab
に-D
オプションを指定して、lldb デバッガーを起動します。% matlab -Dlldb
-nojvm
起動フラグを使用して、MATLAB を起動します。(lldb) run -nojvm
MATLAB で関数
dbmex
によるデバッグを有効にして、MEX ファイルを実行します。>> dbmex on >> yprime(1,1:4)
デバッガーはユーザー定義信号をトラップし、プロンプトが lldb に戻ります。
デバッグを開始することができます。
ゲートウェイ ルーチンの先頭で停止するように、
mexFunction
でブレークポイントを設定すると便利です。(lldb) b mexFunction
ブレークポイントに達した後、デバッガーの任意のコマンドを使用して、変数の確認、メモリの表示、レジスタの検査ができます。以下を入力してブレークポイントから先に進みます。
(lldb) c
最後のブレークポイントで停止後、以下を入力します。
(lldb) c
yprime
が終了し、MATLAB に以下のように表示されます。ans = 2.0000 8.9685 4.0000 -1.0947
MATLAB プロンプトで次のコマンドを入力して、デバッガーに制御を返します。
>> dbmex stop
または、MATLAB の実行を終了する場合は、以下を入力します。
>> quit
デバッガーの使用が終了したら、次のように入力します。
(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
ブレーク ポイントを設定してデバッガーの他のコマンドを実行できます。