零基礎學VR開發:VR開發中的腳本調試

關於VR開發調試

歷時很久開發出來的VR項目,為什麼出現各種故障?怎麼能查出其中的紕漏?這些需要調試診斷工具從旁協助。調試是VR開發過程中必不可少的環節。

對於VR複雜的開發程序,為了便於用戶對腳本程序進行測試、調試等檢查操作,Vizard軟體提供了腳本調試工具,接下來為大家講解各個工具的使用。

1Vizard的腳本(Script)菜單

在「Script」菜單下面包含如下一些菜單項,可用於腳本程序的執行:「Run docked」選項用於將運行的圖形窗口嵌入到Vizard軟體的IDE中,這種方式便於程序調試;「Run with Python」選項用於執行與Vizard開發包無關的python程序,此時所有vizard開發模塊都是禁用的;「Run with Vizard 2.5」選項使用2.5版的Vizard引擎運行腳本程序,只有安裝了2.5版軟體后才會出現該選項;「Run with Vizard 3.0」 選項使用3.0版的Vizard引擎運行腳本程序,只有安裝了3.0版軟體后才會出現該選項。

Advertisements

Script菜單

注意

當執行某個腳本程序時,Vizard軟體不但首先對其進行保存,而且還會保存其他所有已經打開的腳本文件。這對於包含多個腳本文件的大型項目來說,是非常有用的。它能夠保證程序的執行是基於所有相關文件的最新修改結果的。

另外,如果再次執行一個已經正在運行的腳本程序,那麼系統會彈出如圖所示的對話框。其中,「Relaunch」選項適合於腳本程序已經被修改、需要重新執行的情況;「Focus」會將當前運行的窗口顯示到最前端;「New Instance」會保留正在運行的圖形窗口,並啟動一個新的運行窗口。

腳本程序的運行方式對話框

2Vizard IDE運行參數工具欄

為了將外部參數傳遞給腳本程序,Vizard IDE提供了一個運行參數工具欄。選擇菜單「View/Toolbars/Run Arguments」,可以將其顯示出來。運行參數工具欄可以將任意字元串作為可選參數傳遞給腳本程序,這樣就能夠在不修改程序代碼的情況下,調整程序運行效果。例如,如果需要將程序運行時的某些數據記錄到日誌文件中,那麼就可以將日誌文件名作為外部參數傳遞給腳本程序。

Advertisements

如果需要在運行參數工具欄中輸入多個字元串,那麼這些字元串之間應該用空格隔開。如果一個字元串本身包含有空格字元,那麼應該用引號將這個字元串括起來。在腳本程序中,使用列表類型的系統變數「sys.argv」訪問外部參數。這個列表變數的第一個元素為當前腳本文件的完整路徑名,其餘元素為外部輸入的各個字元串。下面的代碼說明了外部參數的處理方法。

import sys

for arg in sys.argv[1:]:

viz.logNotice(arg)

3調試工具的控制功能

調試工具可以隨時暫停程序,並支持斷點設置、單步執行、查看函數調用的堆棧情況、查看變數取值等功能。

在菜單「Debug/Breakpoints」中列出了所有與斷點功能相關的選項,包括斷點設置、瀏覽、清除等項目。另外在腳本編輯器窗口內,右鍵菜單中也有啟用和清除斷點的切換選項「Toggle breakpoints」。需要說明的是,無論腳本程序是否正在運行,都可以為其設置斷點。

在「Debug」菜單下有兩個與調試工具相關的選項:「Run Debugger」會執行當前的腳本程序,並立即調用調試工具;「Attach to Script」可以為當前正在正常運行的腳本程序附加調試功能,並啟動調試工具。

啟動調試工具后,腳本程序會一直正常運行,直到遇到代碼中的斷點或者用戶點擊了中斷按鈕(圖標為

)時才會暫停下來。在程序調試過程中,Vizard 界面中會顯示出調試工具欄(圖例為

)、函數調用的堆棧窗口、全局和局部變數查看窗口等。

調試狀態下的Vizard界面

當程序遇到斷點時,調試工具欄中的相關選項會變為可用狀態;編輯器中的中斷行(該行還沒有被執行)會變為高亮顯示狀態;函數調用的堆棧窗口、全局和局部變數查看窗口會根據當前情況完成更新。

在調試過程中,調試工具欄中各個選項的功能如下:「

」表示繼續執行程序,直到下一個斷點;「

」表示單步執行到任何命名空間的下一行代碼;「

」表示單步執行到當前命名空間或父空間中的下一行代碼;「

」表示跳出當前命名空間。另外,右鍵菜單中的「

」表示執行到游標所在的代碼行。

4函數調用的堆棧窗口

函數調用的堆棧窗口顯示了當前所有正在執行的函數,以及它們當前所處的代碼行。堆棧中的各個函數是按照壓入/彈出的順序組織的。即:當程序進入某個函數時,該函數壓入堆棧;當程序跳出某個函數時,該函數彈出堆棧。如下圖所示,函數「function1」調用了「function2」,而函數「function2」又調用了「function3」,程序當前的執行位置處在函數「function3」的第16行。如果滑鼠點擊堆棧窗口中的某一項,游標會跳轉到相應函數的執行位置,並高亮顯示該代碼行。

函數調用的堆棧窗口示例

5變數查看窗口

全局和局部變數查看窗口如下圖所示。如果用戶定義的某個變數名與python內置關鍵字或全局變數同名,那麼窗口中該變數名的旁邊會出現警告圖標(

)。例如:下圖中的變數名「str」與python內置的字元串數據類型的名稱同名。遇到這種情況時,最好對用戶定義的變數名進行重命名,以免出現難以定位的程序bug。

變數查看窗口示例

Advertisements

你可能會喜歡