示例
包含暫停陷阱例程呼叫。
$halt
$halt
包含當前暫停陷阱例程的名稱。當遇到halt
命令時,應用程式將呼叫暫停陷阱例程。該暫停陷阱例程可以在發出halt
命令之前執行清理或日誌記錄處理,或者可以替代其他處理而不是暫停程式執行。
可以使用set
命令將$halt
設定為暫停陷阱例程。暫停陷阱例程由帶引號的字串指定,格式如下
set $halt=location
此處的位置可以指定為label
(當前例程或過程中的標籤),^routine
(指定外部例程的開始)或label^routine
(指定外部例程中的指定標籤)。
$halt
在某些情況下(但在程式中不支援)支援label + offset
。這個可選的+offset
是乙個整數,指定要從label
偏移的行數。 intersystems建議在指定位置時避免使用行偏移量。
呼叫過程或cachesys%
例程時,不能指定+偏移量。如果嘗試這樣做,caché會發出錯誤。
$halt
定義當前上下文的暫停陷阱例程。如果已經為當前上下文定義了停止陷阱,則新陷阱將替換它。如果指定了不存在的例程名稱,則halt
命令將忽略$halt
並展開堆疊以在先前的上下文級別定位有效的$halt
。
要刪除當前上下文的暫停陷阱,請將$halt
設定為空字串。嘗試使用new
或kill
命令刪除暫停陷阱會導致錯誤。
發出halt
命令時,caché會在當前上下文中檢查$halt
。如果沒有為當前上下文定義$halt
(或者將其設定為不存在的例程名稱或空字串),則caché會將堆疊展開到先前的上下文,並在其中查詢$halt
。該過程將一直持續到找到定義的$halt
或堆疊完全解卷為止。 caché使用$halt
的值將執行轉移到指定的暫停陷阱例程。暫停陷阱例程在定義$halt
的上下文中執行。沒有設定錯誤**或發出錯誤訊息。
如果在當前上下文或先前的上下文中未設定有效的$halt
,則發出halt
命令將完全展開堆疊並執行實際的程式暫停。
通常,暫停陷阱例程執行一些清理或報告處理,然後發出halt
命令。請注意,在定義了$halt
的情況下,原始的halt
命令將呼叫暫停陷阱,但不會執行實際的程式暫停。為了使實際停止,停止陷阱例程必須包含第二個halt
命令。
暫停陷阱例程發出的halt
命令不會被該暫停陷阱捕獲,但是可能會被在較低上下文級別建立的暫停陷阱捕獲。因此,可以由單個halt
命令呼叫一系列級聯的停止陷阱。
如果設定了$halt
,並且在發出halt
時為^%zstop
定義了**,則首先執行$halt
。$halt
可以防止程序終止,如果它的halt
陷阱例程不包含halt
命令。
當程序實際終止時,執行^%zstop
例程。
以下示例使用$halt
來建立乙個halt陷阱:
/// d ##class(pha.test.specialvariables).halt()
classmethod halt()
(pha.test.specialvariables)
.halt()
the halt trap is:
+101
^pha.test.specialvariables.
11請注意,終端確保指定的例程存在。
以下示例顯示了在定義$halt
的上下文中如何執行暫停陷阱例程。在此示例中,$halt
定義為$estack
級別0,halt
發出為$estack
級別1,並且暫停陷阱例程以$estack
級別0執行。
/// d ##class(pha.test.specialvariables).halt1()
classmethod halt1()
除了$halt
是在$estack
級別1定義的,以下示例與上一示例相同。在$estack
級別1發出的halt
命令以及在$estack
級別1執行的暫停陷阱例程。暫停陷阱例程解開堆疊,並且,如果找不到在先前上下文級別定義的$halt
,它將暫停程式執行。因此,不執行do
命令之後的write
命令。
以下示例顯示了如何呼叫一系列級聯的暫停陷阱。暫停陷阱halt0
定義為$estack
級別0,並且暫停陷阱halt1
定義為$estack
級別1。halt
命令以$estack
級別2發出。caché展開堆疊以在$estack
級別1呼叫暫停陷阱halt1
。該停止陷阱發出乙個halt
命令。 caché展開堆疊以在$estack
級別0呼叫暫停陷阱halt0
。此暫停陷阱發出乙個halt
命令,該命令暫停程式執行。
/// d ##class(pha.test.specialvariables).halt3()
classmethod halt3()
第二章 Cach 變數大全 ECODE 變數
包含當前錯誤 字串。ecode ec發生錯誤時,cach 會將 ecode特殊變數設定為逗號分隔的字串,其中包含與錯誤相對應的錯誤 例如,當引用未定義的全域性變數時,cach 將 ecode特殊變數設定為以下字串 m7,ecode可以包含iso 11756 1999標準m錯誤 格式為m 其中 是整數...
第七章 Cach 變數大全 IO 變數
包含當前輸入 輸出裝置的id。io i io包含所有輸入 輸出操作所指向的當前裝置的裝置id。如果輸入和輸出裝置不同,則 io包含當前輸入裝置的id。cach 在登入時將 io的值設定為主要輸入 輸出裝置。principal包含主體裝置的id。發出use命令來更改當前裝置。只有use和close命令...
第三章 Cach 變數大全 ESTACK 變數
示例注意 estack 和錯誤處理 包含從使用者定義的點儲存在呼叫堆疊上的上下文幀的數量。estack es estack包含從使用者定義的點為job儲存在呼叫堆疊上的上下文幀的數量。可以通過使用new命令建立 estack的新副本來指定這一點。estack特殊變數類似於 stack特殊變數。兩者都...