デバッグツールDebugging-Tools
OriginはLabTalkスクリプトを開発およびデバッグするさまざまなツールを提供しています。
コードビルダ (Originの機能)
コードビルダ は、Originの統合開発環境で、LabTalkスクリプト、Origin Cのコード、Xファンクションのコード、Origin Cで記述されたフィット関数のデバッグを行います。コードビルダでは、ブレークポイントの設定、ステップバイステップによる実行、変数値のインスペクションなど便利なデバッグツールを使うことができます。コードビルダは ed.open() メソッドで開くことができます。
コードビルダを使用する方法については、プログラミングヘルプファイルのコードビルダユーザガイドをご覧下さい。
ここではコードビルダでLabTalkスクリプトをデバッグする方法についてサンプルを紹介します。
- 以下のスクリプトを実行してOGSファイルを開きます。
// ogs ファイルをコードビルダで開く
file$ = system.path.program$ + "Samples\LabTalk Script Examples\ave_traces.ogs";
ed.open(%(file$));
- 開いたファイルで22行目にある、以下のスクリプトの左側の余白をクリックして、ブレークポイントをセットします。
fname$ = system.path.program$ + "Samples\Data Manipulation\not_monotonic_multicurve.dat";
ブレークポイントは次のようになります。
- 12行目-[main]セクション-にカーソルを合わせます。それから、メニューでデバッグ:現セクションの実行を選択します。 [Main]セクションのコードが実行され、ブレークポイントで止まります。
- では、F10を押して1行ごとにコマンドを実行していきましょう。コードビルダはウォッチウィンドウでデバッグ中の変数の値を確認できます。例えば、F10を1回押したあと、 まだ開いていないならば表示:ウォッチと操作してウォッチウィンドウを開きます。このウィンドウ内のテーブルに左側のセルにfname$ と入力すると、値が同じ行の右側のセルに表示されます。
- 残りのスクリプトを実行するには、F5キーを押してください。他のブレークポイントがなければ、最後まで実行されます。
Ed (オブジェクト)は、コードビルダにアクセスするスクリプトを提供し、LabTalkスクリプトとOrigin Cコード専用のエディタです。
ed オブジェクトメソッドは次の通りです。
メソッド
|
説明
|
ed.open()
|
コードビルダウィンドウを開きます。
|
ed.open(fileName)
|
コードビルダウィンドウに指定したファイル(fileName)を開きます。
|
ed.open(fileName, sectionName)
|
コードビルダウィンドウに指定したOGSファイルの指定したセクション(sectionName)を開きます。(見つからなかった場合、デフォルトは最初を開きます。)
|
コードビルダを開く
ed.open()
コードビルダで特定のファイルを開く
次のコマンドはファイル myscript.ogsを開きます。
ed.open(E:\myfolder\myscript.ogs)
事前保存のパスでファイルを開く
cd (コマンド) Xファンクションを使って、最初に特定のフォルダに切り替えます。
cd 2;
ed.open(autofit.ogs);
LabTalk Variables DialogEd Commandlist commandvariables viewerfunctions viewer
オプション無しのlistコマンド だけでなく、 ed (コマンド) ( ed オブジェクトとは異なる) は、LabTalk変数ダイアログを開きます。このダイアログは、現在のプロジェクトにあるすべての変数の属性の表です。 属性には、変数名、値、データ型、サブデータ型、プロパティ、プロット情報、説明があります。
これは、変数の現在の値とプロパティをリアルタイムで表示できるので、スクリプトのプログラマーにはとても便利です。 さらに、変数の属性がテキスト記述子の場合、変数をアルファベット順にソートでき、 数値の場合、数値でソートできます。
全変数リストのサブセットを表示できるダイアログの右側にチェックボックスがあります。
Echo (システム変数)
デバッグおよびトレースを行うため、Echo変数は、スクリプトやエラーメッセージをコマンドウィンドウ(または利用可能ならスクリプトウィンドウ)に出力します。echoを有効にするには、次のようにスクリプトウィンドウに入力します。
echo = Number
Number は次のいずれかです。
Number
|
説明
|
1
|
エラーとなったコマンドの表示
|
2
|
遅延実行のためキューに送られたスクリプトを表示
|
4
|
実行されたコマンドの表示
|
8
|
実行された代入文の表示
|
16
|
マクロの表示
|
Note: これらの値は、2進数の異なるビット位置に対応しており、それらを足し合わせると、組み合わされた設定となります。 例えば、echo = 12は、コマンドと代入文の両方のスクリプトを表示します。 Echo = 7は、echo = 1, echo = 2, echo = 4の組合せで、メニューコマンドを選択したときに実行されるスクリプトを表示させたい場合に便利です。 echoを解除するには、スクリプトウィンドウにecho = 0と入力します。
#!script (特別なシンタックス)
この表記を使ってスクリプトにデバッグ用ステートメントを埋め込みます。#記号は、LabTalkインタープリタにその行の最後までのテキストを無視するよう通知するものです。しかし、その後に ! 記号が続いている場合、 @Bシステム変数 (または System.Debug オブジェクトプロパティ)が1にセットされている場合にはスクリプトが実行されます。次は、このオプションのサンプルを示しています。
@B = 1;
range rr = [Book1]Sheet1!col(A); // 列AをRange変数に
for (ii=1; ii<=10; ii+=1) {
#!ii=; rr[ii]=; // デバッグ用埋め込みステートメント
rr[ii]+=ii*10;
}
@B = 0;
#!type -a This line will not execute
このスクリプトは @B を1としてセットし、#! 行を実行できるようにしています。
@B を0としてセットすると、最後の行は実行しません。
{script} (特別なシンタックス)
LabTalkコード内のエラーによって、その場所でコードが止まり、エラーの後のステートメントは実行されません。このような場合でもスクリプトに続けて実行してほしい場合、中括弧({ })でエラーの扱いを止めるところと再開するところを指定します。例えば、次のスクリプトでは、
type Start;
impasc fname:=BadFileName;
type End;
Start という語句がスクリプトウィンドウに出力されますが、BadFileNameが見つからない場合、スクリプトはそこで実行を停止し、End は出力されません。
そこで、次のように中括弧({ })で疑わしい行を囲みます。
type Start;
{
impasc fname:=BadFileName;
}
type End;
すると、BadFileNameが適切にインポートされたかどうかに関係なく、End が出力されます。
この条件を変数で捕まえることもできます。
@LT = 3; // 2017 SR2以降で使用、以前のバージョンのこの行を削除
flag = 1;
{
impasc fname:=MyFile;
flag = 0;
}
if(flag)
type Error ocurred;
else
type OK;
OGSファイル内のセクションが実行できない場合にも、同様の状況になります。コードは何も出力せず、呼び出しているコンテキストに戻ります。上記の方法を使用してどのコードが実行できないか、確認できます。この場合、括弧は特に必要ありません。
[Called Section]
flag = 1;
BadCommand; // この行でエラーが起こり、戻る
flag = 0; // フラグ (グローバル変数である必要があります) が1の場合、// 上記コードが失敗した事を示します。
@Bシステム変数は、デバッグモードを制御して、#!で始まるLabTalkステートメントを実行します。:
1 = enable
0 = disable
Note: これは System.Debug オブジェクトプロパティと同等です。
@OC (システム変数)は、LabTalkからOrigin C関数を呼び出すことができるかどうかを制御します。
値
|
説明
|
@OC = 1 (デフォルト)
|
Origin C関数を呼び出すことができる
|
@OC = 0
|
Origin C関数を呼び出すことは できない
|
@VはOriginのバージョン番号を示します。@VとSystem.Versionオブジェクトプロパティは同じです。
@VDF = 1にセットされている場合、プロジェクトファイル(OPJ)を開くとき、Originはファイルを保存したOriginのバージョンを出力します。
VarName= (コマンド)
このコマンドは、変数の値を調べます。スクリプトにこれを埋込みスクリプト実行中にスクリプトウィンドウに中間的な変数の値を表示します。
サンプル 1
次のコマンドはmyHight変数の値を出力します。
myHight=
listコマンドはシステム環境を調べるのに使います。例えば、list sコマンドはプロジェクト内のすべてのデータセット(一時データセットを含む)を表示します。
ErrorProcマクロはエラーをトラップするのに有効です。
ErrorProcマクロがトリガーされる場合
- LabTalkインタプリタが#Command Error.を検出したとき。
- ダイアログボックスでキャンセルがクリックされたとき。
- キャンセルボタンの無いダイアログボックスで「いいえ」がクリックされたとき
ErrorProcマクロは実行直後に削除されます。
このNotReadyマクロは、「This operation is still under development...」というメッセージをOKボタン付きのダイアログボックスに表示します。
このコマンドはtypeコマンドの一種で、実行中のディレクトリ内で指定したスクリプトファイル(.OGS)の内容を、コマンド(もしくはスクリプト)ウィンドウに出力します。ogsFileName 内のファイル拡張子、.OGSは省略されることに注意してください。ファイル名はパスを含むことができず、作業フォルダ内にある必要があります。
サンプルは以下の通りです。
次のスクリプトはDの内容を表示します。\temp\mytemp1.ogs および C:\myogs\hello.ogs.
cd D:\Temp;
type mytemp1.ogs; // 拡張子を含む
cd C:\temp;
type hello; // 拡張子は含まない
ログをファイルに出力
ログの情報をファイルに出力するには typeコマンドがあります。type -gbはログファイルの出力先を指定し、出力ルーチンを開始します。type -geはルーチンを終了し、ファイルへのログを終了します。例えば、
type -gb %Ylog.txt; // テキストをファイル log.txtに書き始める// 存在しない場合は作成する
type aa; // aaと記入
type bb; // bbと記入
type cc; // ccと記入
type -ge; // 記入終了
これは、スクリプトが30000バイトのバッファしかないため、スクリプトウィンドウに非常に大きな出力をしている際に特に便利です。
|