メインコンテンツ

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

Linux® システムで使用できる GNU® デバッガー gdb には、ブレークポイントの設定、変数の調査、およびソース コードの行単位実行機能を含む、ソース コードの完全なデバッグ機能が用意されています。

この手順では、MATLAB® コマンドの前に MATLAB コマンド プロンプト >> が表示されますが、linux> は Linux プロンプトを表しています。システムによりプロンプトが異なる場合があります。デバッガーのプロンプトは、<gdb> です。

この例では、MATLAB fullfile(matlabroot,"extern","examples","mex") フォルダー内にある yprime.c をデバッグするための一般的な手順を説明します。

gdb を使用した MATLAB プロセスへの接続

  1. MATLAB を起動します。

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

    >> mex -g yprime.c
  3. MATLAB プロセス ID 番号を取得します。 (R2025a 以降)

    >> matlabProcessID
    ans =
    
      uint64
    
       38932
  4. Linux ターミナルで、プロセス ID 番号を使用して MATLAB を gbd に接続します。

    linux> gdb -p 38932
  5. デバッガーを起動します。

    <gdb> continue
  6. MATLAB のデバッグを開始する場合は、gdb を中断して次のコマンドを入力します。

    <gdb> Ctrl+C
    <gdb> handle SIGUSR1 stop print
    
  7. JVM® が読み込まれている場合は、次のコマンドを入力します。

    <gdb> handle SIGSEGV SIGBUS nostop noprint

    Java® が読み込まれているかどうかを確認するには、MATLAB プロンプトで次を入力します。

    >> jenv
  8. MEX 関数へのエントリ ポイント mexFunction にブレークポイントを設定します。

    <gdb> break mexFunction
    <gdb> continue
  9. MATLAB で、MEX ファイルを実行します。

    >> yprime(1,1:4)
  10. この時点でコードをステップ実行できます。

    <gdb> step
  11. デバッグ セッションを完了するには、次を入力します。

    <gdb> continue
  12. yprime が終了し、MATLAB に以下のように表示されます。

    ans =
    
        2.0000    8.9685    4.0000   -1.0947

gdb を使用した MATLAB の起動

gdb でデバッグするには、以下の手順に従います。

  1. Linux プロンプトで、-D オプションを使用して matlab 関数を使用し、gdb デバッガーを起動します。

    linux> matlab -Dgdb
  2. デバッグを停止するよう gdb に指示します。

    <gdb> handle SIGUSR1 stop print
  3. デスクトップなしで MATLAB を起動します。

    <gdb> run -nodesktop
  4. JVM が読み込まれている場合は、次のコマンドを入力します。

    <gdb> handle SIGSEGV SIGBUS nostop noprint

    Java が読み込まれているかどうかを確認するには、MATLAB プロンプトで次を入力します。

    >> jenv
  5. -g オプションを指定してソース MEX ファイルをコンパイルします。これで、デバッグ シンボルがインクルードされたファイルがビルドされます。たとえば、MATLAB プロンプトで以下を入力します。

    >> mex -g yprime.c

    MATLAB で関数 dbmex によるデバッグを有効にして、バイナリ MEX ファイルを実行します。

    >> dbmex on
    >> yprime(1,1:4)
  6. デバッグを開始することができます。

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

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

    以下を入力してブレークポイントから先に進みます。

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

    <gdb> continue

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

    ans =
    
        2.0000    8.9685    4.0000   -1.0947
  9. MATLAB プロンプトで以下を入力して、デバッガーに制御を返します。

    >> dbmex stop

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

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

    <gdb> quit

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

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

参考

|