13

MATLAB エラー メッセージをファイルに保存する方法はありますか?

これは単純な問題かもしれませんが、Google は答えをくれませんでした。MATLAB ライセンスなしで使用するために GUI 実行可能ファイルをコンパイルしましたが、時々フリーズします。見栄えを良くするために、通常はそのような実行可能ファイルに付随するコマンド ウィンドウを非表示にしたので、コマンド プロンプトからエラー メッセージを取得できません。デバッグ用にメールで送信できるエラー ログを作成できるようにしたいと考えています。

ありがとう!

4

5 に答える 5

12

コードの前後で try...catch ステートメントを使用します。catch ブロックでは、スタック情報を含むエラーを書き出すことができます。sendmail を使用すると、メールでエラーを通知するコードを作成することもできます (理想的には、ユーザーがクラッシュ情報を共有するかどうかを決定できるポップアップを使用します)。

try
   % your code here
catch err
   %open file
   fid = fopen('logFile','a+');
   % write the error to file
   % first line: message
   fprintf(fid,'%s\n',err.message);

   % following lines: stack
   for e=1:length(err.stack)
      fprintf(fid,'%sin %s at %i\n',txt,err.stack(e).name,err.stack(e).line);
   end

   % close file
   fclose(fid)
end 

エラーメッセージをファイルに書き込む方法をもう少し明確にするために編集

于 2009-12-16T23:40:50.943 に答える
11

「diary」コマンドを使用して、ログ ファイルを作成します。これにより、Matlab はすべてのコマンド ライン出力のコピーをファイルに書き込みます。これには、警告、エラー メッセージ、未処理の例外のスタック トレースが含まれます。Sendmail() は、エラー時にそれを送信できます。スペースを節約したい場合は、通常の (エラーのない) プログラム終了時にプログラムにログ ファイルを削除させることができます。

IMHOこれは、「try ... catch; write errors; end」を使用するよりも望ましいです。

  • AWT スレッドから発生した Java 例外や GUI の M コード コールバックからのエラーなど、キャッチされていないすべてのエラーをキャプチャします。
  • segfault のように、Matlab が激しくクラッシュする場合、M コード レベルの try/catch はそれをキャッチしません。ただし、ダイアリー ファイルにはまだ segfault ダンプが記録されている場合があります。
  • 進行状況メッセージ、デバッグ情報、および警告を発行して、エラーに至るまでのプログラムの動作に関する詳細情報を提供できます。これらはすべてキャプチャされます。
  • 私は catch ブロック内のコードを最小限に抑えるのが好きです。

同等のことを行うコマンド ライン オプションもあります。コンパイルされたMatlabでそれを呼び出す方法がわかりません。

于 2009-12-17T20:05:59.350 に答える
1

Matlab コマンド ウィンドウのような正確な書式設定スタイルについては、次を使用します。

rep = getReport(exception, 'extended', 'hyperlinks', 'off');

name = strcat('Data\', name, '.txt');
fid = fopen(name, 'w+t','n');
fprintf(fid, 'Error message\n-------------\n\n');
fprintf(fid, '%s\n', rep);
fclose('all');
于 2013-04-06T13:47:40.957 に答える