前面我們學習了使用“開始”旗幟和“停止”旗幟來調試程序,來跟蹤程序的執行流程。對于簡單應用程序我們可以使用旗幟來定位錯誤的產生位置和程序的運行方向。對于authorware的可視化編程手段,簡單的程序流程我們還可以判斷并跟蹤。但對于采用復雜交互和復雜分支結構的應用程序,簡單地依靠authorware的可視化編程的便利來跟蹤程序的流程是遠遠不夠的,基于這個原因,authorware為用戶提供了一個功能窗口,即跟蹤窗口。提供跟蹤窗口的目的就是為了方便程序的調試。
跟蹤窗口主要用來顯示authorware在執行程序的過程中所遇到的設計按鈕的相關信息。如果程序的分支結構特別復雜,或者程序執行得太快以至于我們很難看得清楚,此時跟蹤窗口將是我們能力的延伸,可以幫助我們來調試復雜的或運行很快的應用程序。
打開跟蹤窗口的方法是:選擇authorware中【窗口】菜單中的【控制面板】命令(快捷鍵為【ctrl+2】),彈出控制面板。單擊控制面板最右邊的【跟蹤】命令按鈕彈出跟蹤窗口。
跟蹤窗口和控制面板連接在一起成為組合窗口,該組合窗口是一個浮動窗口,可以用鼠標調整到屏幕的任意位置,也可以像改變其他windows 窗口一樣通過拖曳窗口的四邊和四角來任意改變窗口的大小。
當我們沿程序流程線來跟蹤authorware作品時,將會遇到“等待”設計按鈕、“交互作用”設計按鈕、“框架”設計按鈕等需要用戶輸入交互響應的設計按鈕。該跟蹤窗口會自動停下來,等候用戶與程序的對話,然后從該處繼續執行跟蹤任務。
在跟蹤窗口有6個功能按鈕,下面請讀者來逐步學習這6個功能按鈕在跟蹤窗口中的作用,如圖7-2所示。
圖7-2 跟蹤窗口中的功能按鈕
1)從“開始”旗幟處重新開始:使用該功能按鈕,跟蹤窗口將從程序流程線上的“開始”旗幟所在位置重新開始跟蹤??旖萱I為【ctrl+alt+r】。
2)從“開始”旗幟重新設置跟蹤窗口:如果“開始”旗幟已經放置到流程線上,則單擊該功能按鈕,跟蹤窗口便從“開始”旗幟處重置跟蹤。
3)單步跟蹤:如果是一個分支結構或者是一個“映像”設計按鈕,則單擊該按鈕,authorware將執行分支結構或“映像”設計按鈕中的所有對象,而不是一個設計按鈕一個設計按鈕地執行。在使用該功能按鈕時,在跟蹤窗口只顯示“映像”設計按鈕的圖標,以及包含“映像”設計按鈕名和進入、退出該“映像”設計按鈕記錄的信息列表。
提示:單步跟蹤功能在調試中,有助于接近問題的所在??旖萱I為【ctrl+alt+dnarrow】。
4)進入跟蹤:該功能按鈕用于在流程線上更精確地跟蹤,如果是一個分支結構或者是一個“映像”設計按鈕,單擊該按鈕,則authorware將進入分支結構或“映像”設計按鈕中,一個設計按鈕一個設計按鈕地執行。在使用該功能按鈕時,跟蹤窗口會顯示所有設計按鈕的信息。
提示:進入跟蹤功能在程序的調試中有助于發現問題的所在,快捷鍵為【ctrl+alt+→】。
5)跟蹤開關:該功能按鈕控制跟蹤信息的顯示與否,即使是在跟蹤的時候,該功能按鈕仍然可用。在調試的過程中,我們可能只對某一部分的信息有興趣,則可以將該按鈕關上,關閉跟蹤信息。事實上,建議設計者將該功能按鈕一直打開,又不會影響程序的執行效果,信息當然是越多越好。還是讓跟蹤窗口打開的好。
6)顯示不可見的信息:在該功能按鈕打開的情況下,程序在展示窗口上可以顯示某些不能顯示的內容,例如目標區等。當該按鈕關閉時,程序不顯示這些不可見的內容。
上述控制面板和跟蹤窗口功能按鈕的功能我們可以在authorware中【調試】下拉菜單中找到相應的命令選項。我們在程序的調試過程中,既可以使用控制面板上的功能按鈕,也可以使用菜單命令,還可以使用快捷鍵。作為一個專業的編程人員,建議設計者將各功能按鈕的快捷鍵多加熟悉。在編程和調試過程中,設計者會發現,熟練地使用快捷鍵會大大地節省時間,提高程序設計的效率。
在跟蹤窗口中,跟蹤窗口的6個功能按鈕下是將要執行的設計按鈕的圖標,包括該設計按鈕的名稱。功能按鈕下為將要執行的設計按鈕的圖標和名稱,讀者可以根據該區域的內容來判斷當前程序執行到流程線上的位置。如現在將要執行的圖標是“輸入目標0-100”的交互圖標。
最下方的區域是已經執行過的設計按鈕的信息:
“1:dis:箭頭
1:dis:靶子
1:int:輸入目標0-100 (enter)
信息的通用格式為:number:“class”:“title”,下面讓我們來介紹各符號的含義。
① number:該符號代表的是設計按鈕在程序流程線上的級別。最先的流程線級別為“1”。通過該信息,我們可以定位該設計按鈕在流程線上的層次。
注意:當設計按鈕包含在流程線上的“群組”設計按鈕中的時候,就產生了流程線級別的概念,例如,如果一個“群組”設計按鈕在最初的設計窗口流程線上,則該“群組”設計按鈕的流程線級別為1級,而包含在該“群組”設計按鈕內的設計按鈕的流程線級別為2級,依次類推。
②“class”:該符號顯示的是該設計按鈕所屬的類別,這一類別是設計按鈕的縮寫。
表7-1為authorware中所有設計按鈕類型名稱及其縮寫。
表7-1 設計按鈕類型及其在跟蹤窗口中的縮寫
設計按鈕類型名稱 | 設計按鈕類型縮寫 |
disply【顯示】設計按鈕 | dis |
motion【移位】設計按鈕 | mtn |
erase【擦除】設計按鈕 | ers |
wait【等待】設計按鈕 | wat |
navigate【定向】設計按鈕 | nav |
framework【框架】設計按鈕 | frm |
decision【判定】設計按鈕 | des |
interaction【交互】設計按鈕 | int |
calculation【運算】設計按鈕 | clc |
map【群組】設計按鈕 | map |
digital movie【數字化電影】設計按鈕 | mov |
sound【聲音】設計按鈕 | snd |
anolog video【模擬視頻】設計按鈕 | vod |
③“title”:該符號顯示的是設計按鈕的標題。在前面的學習中我們強調過給設計按鈕一個描述性標題的重要性,通過設計按鈕的標題,不僅可以用來注釋流程線,而且對跟蹤窗口也是非常有幫助的。用各設計按鈕有效的描述性標題,我們可以更有效地利用跟蹤窗口。
關于enter/exit(進入和退出)跟蹤信息的說明如下。
讓我們以一個實例來理解該內容,如圖7-3所示。
圖7-3 跟蹤信息窗口
讀者可以在“進入或退出跟蹤信息”中看到如下內容:
1:dis:靶子
1:int:輸入目標0-100 (enter)
1:clc:
1:mtn:箭頭移動
1:dec:判斷 (enter)
請讀者對照圖7-4中的程序流程結構,我們可以看到以下內容。
圖7-4 飛向靶心流程圖
第一條信息對應于進入標題為“靶子”的“顯示”設計按鈕。
第二條信息對應于進入標題為“輸入目標0-100”的“交互作用”設計按鈕,所以在第四個區域有信息“(enter)”。
第三條信息對應于“輸入目標0-100”的“交互作用”設計按鈕分支結構中的“運算”設計按鈕。
第四條信息對應于進入標題為“箭頭移動”的“移動”設計按鈕。
第五條信息對應于進入標題為“判斷”的“決策”設計按鈕,所以在第四個區域有信息“(enter)”。
由此可見,進入或退出信息表示程序流程是進入還是退出“群組”設計按鈕或“交互作用”設計按鈕等具有分支結構的設計按鈕結構中。
使用跟蹤變量來跟蹤管理變量。
跟蹤窗口并非僅僅能跟蹤authorware執行到流程線上的位置,還可以用來跟蹤應用程序中變量的值,跟蹤變量的過程比跟蹤設計按鈕的過程要復雜得多。但是,在實際的程序設計和調試過程中,由于變量的賦值而產生的錯誤是導致程序錯誤一大主要原因,所以,我們在程序的調試過程中要注意變量的賦值。
為了說明如何使用跟蹤窗口在authorware的應用程序運行時跟蹤變量的值,我們仍以實例“飛向靶心”中的程序為原型來說明該問題。
在實例中,程序的邏輯結構如圖7-5所示。我們引入了自定義變量p,p變量的值是通過“交互作用”分支結構中的正文輸入響應讓用戶輸入數值,然后通過一個“運算”設計按鈕賦值給變量p。我們可以在跟蹤窗口中跟蹤該變量在程序執行過程中的賦值內容。
為了實現該功能,我們需要在源程序上加上某些內容。
提示:所添加的內容對源應用程序的運行和效果沒有任何影響。
為了實現在跟蹤窗口中跟蹤指定的變量的值,我們首先要知道,跟蹤窗口并非要檢測和顯示所有應用程序中的變量,跟蹤窗口只顯示開發人員指定的變量的信息,如何來指定要檢測的變量呢?
在學習如何實現該功能之前,先來看一個函數“trace”。
函數的語法格式:trace("string")。
該函數的作用就是將需要在跟蹤窗口中顯示的變量值在跟蹤窗口中顯示出來。使用的方法是,在程序設計人員預期要發生變量值變化的地方,放置一個“運算”設計按鈕,在“運算”設計按鈕對話框中輸入trace函數,則當應用程序運行到該設計按鈕后,authorware不會對程序結果產生任何影響,只是將該trace中的變量值的信息在跟蹤窗口中顯示出來。在跟蹤窗口中顯示的變量值形式為:
--45
在連續兩個連詞符后是變量的值。
該實例具體的實現過程如下所述。
1)如圖7-5所示,在源程序的基礎上,在我們預期變量值要改變的兩個地方分別加上了兩個“運算”設計按鈕。
圖7-5 加跟蹤變量的流程圖
因為我們要監測變量p的值,則我們在兩個“運算”設計按鈕中輸入相同的內容,輸入內容為:“trace(p)”。
2)運行該程序,讀者可以在展示窗口中輸入目標值,然后繼續運行。讀者可以看到在跟蹤窗口中,該變量的值出現了兩次,如圖7-6所示。
圖7-6 加跟蹤變量的信息窗口
我們設置了兩個內容為trace函數的“運算”設計按鈕,所以在跟蹤窗口中,變量p的值出現了兩次。
提示:authorware不像c語言等編程語言,可以動態地監測變量的值,所以我們要在跟蹤窗口中監測變量的值,需要首先預測變量值有可能變化的地方,然后在變化的位置設置一個內容為trace函數的“運算”設計按鈕,從而可以在跟蹤窗口中顯示一次變量的值。要想多次跟蹤該變量,必須設置多個“運算”設計按鈕。
變量值前以兩個連字符來表示是變量值。
當然,我們在交互圖標右邊的計算圖標中要輸入:“p:=entrytext”,當程序要求用戶輸入時,你輸入20,則變量p的值也為20,如圖中顯示的那樣。
另外一種監測變量值的方法是使用disply“顯示”設計按鈕來顯示變量的值。使用該方法可以在展示窗口中動態地監測變量的值的變化。
將變量名嵌入到“顯示”設計按鈕中。具體的步驟如下。
1)在流程線上你想在執行作品的位置前面插入一個“顯示”設計按鈕。如果讀者要從起點運行應用程序,則需要將該“顯示”設計按鈕放置到流程線的頂端。如果讀者想從一個“開始”旗幟來開始運行,則要把“顯示”設計按鈕放置到“開始”旗幟所在位置之下。
在該實例中,我們將“顯示”設計按鈕放置到流程線的頂端,命名為“監測變量”。
2)雙擊打開該“顯示”設計按鈕,在“顯示”設計按鈕中插入變量名。在該實例中我們插入“目標{p}”。
3)選擇authorware中的【修改】→【圖標】→【屬性】命令,打開“屬性”對話框(為了加快速度,讀者可以使用快捷鍵【ctrl+i】)。
4)在對話框中選擇“選項”選項列表中的“更新顯示變量”選項。
5)為了使該變量的顯示內容一直顯現在展示窗口中,我們在該對話框中的“層”正文輸入框中輸入在該應用程序中最高級別的層級,我們輸入層級6。則在程序的運行過程中,該變量變化的值會一直顯示在展示窗口中,除非用“擦除”設計按鈕來擦除。
6)現在我們運行程序來看一看運行的效果。在程序運行的展示窗口中永遠顯示出變量p的值,而且該變量顯示的值隨變量值的變化而實時變化。
提示:在程序的調試過程中,使用在“顯示”設計按鈕中插入變量來監測變量的值是最方便的,我們可以隨時監控變量值的變化,而不用像使用跟蹤窗口一樣來預測值的變化,然后再插入“運算”設計按鈕。使用該方法,當程序調試結束后,僅需要刪除一個“顯示”設計按鈕即可。
使用該方法,我們不僅可以通過名稱跟蹤不止一個變量,而且不需要記住跟蹤變量的順序。
綜上所述,在程序的調試過程中,使用在“顯示”設計按鈕中插入變量來監控變量的值是最方便和靈活的方法。
在結構比較復雜的編輯中,用的圖標多了,為了調試方便,經常使用“開始”與“停止”圖標,有時會出現不知道這兩個圖標去向的情況,這時只要用鼠標在左側工具欄的原位置處單擊便可以快速找回“開始”或者“停止”圖標。
新聞熱點
疑難解答