ZBREAKコマンドは、デバッグ中にルーチンにブレークポイントをセットまたはクリアします。
ZBREAKコマンドのフォーマットは:
ZB[REAK][:tvexpr] [-]entryref[:[expr][:intexpr]][,...]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
必要な entryref は、ブレークポイントを設定または削除するルーチンまたはトリガー内の場所を指定します。
オプションのマイナス記号( - )は、ZBREAKがブレークポイントを削除することを指定します; -* は、すべてのブレークポイントを削除することを意味します。
オプションの式は、GT.Mの実行がブレークポイントに到達した時にXECUTEにGT.Mコードのフラグメントを指定します; もしZBREAKの引数がアクションを指定しない場合、デフォルトのアクションは "BREAK" です。
ブレークポイントのアクションが有効になる前に、式の直後に続くオプションの整数式は、ブレークポイントを介してプロセス遷移の数を指定します; いったんGT.Mがカウントを使い尽くしアクションが有効になると、アクションは、プロセスがブレークポイントに遭遇する毎に発生します。もしアクションの式が省略された場合、オプションの整数式は、隣接する2つのコロン ( :: ) で entryref から分離する必要があります。
間接指定演算子と1つ以上のZBREAKの引数リストに評価される原子式(expression atom)は、ZBREAKのための正当な引数を構成します。
もし並行プロセスが、プロセスがアクティブなZBREAKを持つトリガを再ロードする場合、GT.Mはブレークポイントを自動的に削除し、トリガをリフレッシュするときにTRIGZBRKREM警告メッセージを発行します; TRIGZBRKREM警告メッセージは、VIEW "BREAKMSG" コマンドによって維持される8個のメッセージ・マスクを尊重します。
GT.Mが入り口参照(entryref)を検出する時、GT.Mは、ルーチンのコードの実行を中断し、行上で任意のコマンドを実行する前に、ブレークポイントのアクションをXECUTEします。 entryrefs の詳細については、第5章:“Mの一般的な言語特徴” を参照してください。
オプションの整数式が使用されている時、GT.Mは、ルーチン実行中にブレークポイントを検出するプロセスの intexpr 回目で、ブレークポイントをアクティブにします。いったんGT.Mがブレークポイントをアクティブになると、そのブレークポイントは、明示的に置換または削除されるまで、または、プロセスが終了するまで、プロセスをアクティブのままにします。
詳細については、 第4章:“ダイレクトモードでの操作とデバッグ” を参照してください。
例:
GTM>ZPRint ^ZBTEST ZBTEST; Do SUB Quit SUB Write !,"This is ZBTEST" Quit GTM>ZBREAK SUB^ZBTEST GTM>Do ^ZBTEST %GTM-I-BREAKZBA, Break instruction encountered during ZBREAK action At M source location SUB^ZBTEST GTM>ZSHOW "B" SUB^ZBTEST
SUB^ZBTESTでのデフォルト アクションで、これはZBREAKをインサートします。GT.MがBREAKに遭遇した後、ZSHOW "B" はイメージ内のZBREAKだけでこれが表示されます。
例:
GTM>ZBREAK -* GTM>ZGOTO GTM>ZBREAK SUB^ZBTEST:"W !,""Trace""" GTM>Do ^ZBTEST Trace This is ZBTEST GTM>
これは、ZBREAK -* で、すべての既存のZBREAKを削除します。それらを変更する前に、ZBREAKを削除する必要がないことに注意してください。また、引数なしZGOTOでプロセスの呼び出しスタックをクリアします。次に、トレースポイントを挿入するZBREAKを使用しています。毎回GT.Mが、ZBREAKでトレースポイントを確立している場所の行を実行する場合、ダイレクトモードに入ることなく指定されたアクションを実行します。
例:
ZBreak PRINT^TIME::5
行が5回行が実行される前に、ルーチン内のPRINT 行でこのBREAKが実行されます。
例:
ZBREAK PRINT^TIME:"WRITE AVE BREAK":3
PRINT^TIMEの3番目の実行の前に、これは、WRITE AVE のZBREAK アクションを挿入し、そしてBREAKします。