跳轉到內容

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]

在 GUI 程式中新增除錯選項

[編輯 | 編輯原始碼]

當 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

快速重啟 GUI 程式

[編輯 | 編輯原始碼]

您可以透過在您的程式中新增一個簡單的按鈕來節省少許除錯時間,該按鈕退出程式並重新啟動它。

unview/all
do %<programname>

停止和繼續程式

[編輯 | 編輯原始碼]

使用 Escape 鍵可以將程式停止到控制檯。

可以使用 do-events 命令繼續 GUI 程式。

華夏公益教科書