Originには、LabTalkスクリプトの開発とデバッグに役立つさまざまなツールが用意されています。
このチュートリアルでは、以下の項目について解説します。
*.OGSのテキストファイルのセクションにLabTalkスクリプトを保存すると、コードビルダを使用してLabTalkスクリプトをデバッグできます。
以下のサンプルでコードビルダを使ってデバッグする方法を紹介します。
LabTalk関数、LabTalkで呼び出し可能なOC関数、同じogsまたは別のogs内の別のセクションを呼び出すコマンドラインがある場合、呼び出された関数 (または呼び出されたセクションやogs) を含むコードを一度に1行ずつ実行するかどうかを選択できます。
ステップイン
ステップイン機能を使用すると、呼び出された関数をステップスルーして、関数の論理エラーをチェックできます。
ステップオーバー
ただし、呼び出された関数をステップオーバーすることもできます。これを行うには、ステップオーバーする関数呼び出し行でコードの実行を一時停止します (ブレークポイントを設定するか、関数呼び出しまで一行ごとに実行)。プログラムが関数呼び出し行で一時停止している間に、デバッグツールバーのステップオーバーボタン
をクリックするか、デバッグ:ステップオーバーを選択します。
デバッガは関数呼び出しを実行し、関数が戻った後に一時停止します。

ステップアウト
関数内で実行が一時停止されている場合は、デバッグツールバーのステップアウトボタン
をクリックするか、デバッグ: ステップアウトを選択して関数からステップアウトできます。
カーソルまで実行
ルーチンを中断するブレークポイントがない場合は、カーソルまで実行ボタン
をクリックするか、 デバッグ:カーソルまで実行を選択します。カーソルが設定されている場所に到達するまでスクリプトが実行されます。
また、ed.open()メソッドを使用して、コードビルダでLabTalkスクリプトを開くことができます。たとえば、コード ビルダウィンドウの指定したセクションで指定したスクリプトファイルを開くには、次のようにスクリプトを記述します。
cd 2; //OriginのLabTalkスクリプトサンプルフォルダに切り替え ed.open(summarize_data.ogs,main);
win -oおよびlayer -oコマンドはデバッグとは関係ありませんが、エラーの発生を回避するのに非常に役立ちます。
ワークブックやグラフページ/レイヤなどのOriginオブジェクトを操作するとき、スクリプトは常にデフォルトでアクティブウィンドウに対して行われます。ただし、アクティブなウィンドウまたはレイヤの切り替えに遅延が発生したり、予期せぬ結果を招く可能性があるため、ターゲットウィンドウをアクティブにしたくない場合があります。このような場合、win -oやlayer -oを使用してスクリプトを囲むとよいでしょう。
newbook; //新規ワークブック //ワークブックにファイルをインポート string fn1$=system.path.program$ + "Samples\Spectroscopy\XPS\BTABA.DAT"; impasc fname:=fn1$; string mybk$=%H; //ワークブック名を保存 plotxy (1,2) o:=<new>; //グラフを作成しグラフウィンドウがアクティブに //ワークブックウィンドウに対して中括弧で囲まれたスクリプトを実行 win -o mybk$ { newsheet; string fn2$=system.path.program$ + "Samples\Spectroscopy\XPS\BTATI.DAT"; impasc fname:=fn2$; plotxy (1,2) o:=<new>; }
Type を使用して、現在のディレクトリにある指定したスクリプトファイル (.OGS ファイル) の内容をコマンド (またはスクリプト) ウィンドウに出力できます。
例えば、
cd 2; type autofit; //labtalkサンプルファイルautofot.ogsを印字
デバッグとトレースを行うために、システム変数Echoはスクリプトまたはエラーメッセージをコマンドウィンドウ (またはスクリプトウィンドウ) に出力します。
たとえば、スクリプトウィンドウで次のスクリプトを実行します。
echo=1; string aa$="abc"; double aa=100;
以下のように一般的なエラーメッセージだけでなく、エラーのあるスクリプト行も表示されます。
AA:already declared as string, cannot redeclare in the same scope! Error:double aa=100 //The script line with error will show after runing echo=1.
LabTalkコードにエラーがある場合、コードはエラーの時点で中断され、エラー後の行は実行されません。スクリプトを中断せずに実行し続けたい場合は、エラーのある行を中括弧で囲むこともできます。
たとえば、次のスクリプトを実行します。
newbook name:=abc option:=lsname; wks.ncols=3; col(1)=data(1,10); col(2)=normal(10); plotxy; win -a abc; col(3)=col(1)+col(2);
Col(1)とCol(2)にはデータが入力されますが、入力が指定されていないため "plotxy;" 行で実行を停止します。そのためCol(3) はデータが入力されません。
以下のように中括弧を使用して"plotxy;"の行を囲みます。
newbook name:=abc option:=lsname; wks.ncols=3; col(1)=data(1,10); col(2)=normal(10); {plotxy;} win -a abc; col(3)=col(1)+col(2);
すると次の行が実行され、Col(3)にデータが入力されます。
エラー処理の詳細については、このページを参照してください。
ユーザ定義のOrigin C関数が labtalkogsファイルと同じ名前を持つ場合、labtalk ogs ファイルが優先されます。
たとえば、Origin C 関数"precedence"を作成します。
void precedence() { MessageBox(GetWindow(), "This message is from OC code!", "OC"); }
このOrigin C関数をコンパイルして
precedence;
スクリプトウィンドウで実行します。"This message is from OC code!"というメッセージが表示されます。
次に、ogsファイルを作成し、precedence.ogsという名前を付けて、次のスクリプトでユーザファイル フォルダに保存します。
type -b "This message is from OGS file!";
その後スクリプトウィンドウで次のスクリプトを実行します。
cd 1; // 現在の作業ディレクトリ precedence;
"This message is from OGS file!"というメッセージボックスが表示されます。これで、labtalkスクリプトの優先度が高いことが確認できます。