Rebol 程式設計/除錯技術
Rebol 中有各種除錯工具可用。
探測 是一種非常有用的工具。它的作用是讀取函式的返回值並在控制檯上輸出它們。返回值透過 探測 傳遞,因此您可以在程式中的任何地方插入它。
>> wallet: $25 == $25.00 >> probe wallet $25.00 == $25.00
該值既被列印又作為值返回,因為 探測 允許返回值透過自身傳遞,而 列印 則不返回有用的值。
一個更有用的例子
>> add 3 probe add 2 2 4 == 7
注意: 小心探測大型物件,因為它們可能需要很長時間才能在控制檯上列印。大量的輸出可以透過按 Escape 鍵停止。
跟蹤 可以幫助您在控制檯上檢視函式呼叫或 TCP/IP 網路統計資訊。
>> trace/func on
跟蹤/函式 返回大量反饋,因此最好只在需要檢查的程式碼周圍啟用它。
trace/func on ... some problematic code ... trace/func off
>> trace/net on
在 Rebol 中,很容易意外地重新定義系統詞,因為所有 詞都可以重新定義。此程式碼會導致奇怪的事情發生,遠離原始錯誤
gt: func [a b] [
return: a < b
]
返回上的那個多餘的 ":" 重新定義了返回,而不是返回預期的結果。任何後來使用返回的程式碼都可能出現故障。
一個解決方案可能是保護所有現有的詞免受更改
>> protect-system
新增 列印 語句是除錯程式碼的一種傳統方法。Rebol 有一種巧妙的方法可以讓你在不需要時讓這些語句保持未啟用狀態
訣竅是將另一個詞定義為 print 的同義詞,例如
>> dprint: :print
並使用它來新增除錯列印語句
>> dprint ["my count is " my-count] >> dprint ["file info:" mold info? my-text-file.txt]
在生產程式碼中,或者當您想關閉除錯語句時,只需新增
>> dprint: func [data] []
Rebol 提供了特定的函式來幫助除錯。函式 ?? 列印一個變數名,後跟它的模塑值。與 列印 函式不同,它還返回它接收的值。
>> test: "Hello" == "Hello" >> value: ?? test test: "Hello" == "Hello" >> ?? value value: "Hello" == "Hello"
除錯完成後,您可以從原始碼中刪除所有 ??,或者重新定義 ??,使其只傳遞值,就好像它不再存在一樣。
??: func [val] [val]
當 VID 程式正在執行時,您無法使用控制檯來鍵入 列印 或 ?? 或任何其他除錯函式。解決此問題的一種方法是在您的 VID 程式中新增一個控制檯輸入欄位,並執行鍵入到該欄位中的內容
view layout [
button "Add"
[field1/text: 1 + to-integer field1/text show field1]
label "number"
field1: field 100 "1"
label "console:"
console: field 100 [attempt [do console/text]]
]
嘗試在標有控制檯 的欄位中鍵入 help view。
您可以透過在您的程式中新增一個簡單的按鈕來節省少許除錯時間,該按鈕退出程式並重新啟動它。
unview/all do %<programname>
使用 Escape 鍵可以將程式停止到控制檯。
可以使用 do-events 命令繼續 GUI 程式。