PB中如何調試程序

摘要 介紹PowerBuilder編程工具的高級調試技術,包括臨時斷點和條件斷點設置、變量值改變斷點設置、Just-in-time調試、中間層Jaguar CTS組件的遠程調試等關鍵技術
關鍵詞 斷點;本地調試;遠程調試;Jaguar組件
1 引言
PowerBuilder是數據庫前端
應用開發的主流編程工具,隨着從Client/Server的兩層開發模式到三層甚至多層開發模式的過渡,PowerBuilder不斷增加新的功能以適應和推進這種轉變。PowerBuilder 7的版本已經可以通過開發Jaguar中間層組件創建典型的分佈式應用。這就給PowerBuilder的調試技術提出新的要求。
     調試技術在任何軟件開發中都站有及其重要的位置。利用PowerBuilder開發也不例外。PowerBuilder工具集成了強大的調試畫板,使得調試變得容易,但其中的一些高級的調試技巧和技術並不是很容易掌握,而掌握和使用這些調試的高級技巧和技術是開發高質量軟件產品的重要保證,也是優秀的PowerBuilder開發者必須具備的能力。
     PowerBuilder提供的高級調試技術主要包括:設置臨時和條件斷點、設置變量值改變斷點、Just-in-time調試、Jaguar組件遠程調試術(Remote Debug)。前三種調試技巧適合於本地調試;最後一種是分佈式應用中的調試技巧,可以在客戶端對部署在應用服務端Jaguar CTS(Component Transaction Server組件事務服務器簡稱)的組件進行調試,包括調試陷入到事件或者
方法的腳本,觀察和更改組件變量等。
遠程調試技術以本地調試爲基礎,是PowerBuilder做分佈式開發的關鍵性技術,儘管與本地調試類同,但卻又有其獨特和複雜的一面,是做好PowerBuilder中間層組件開發的重要技術。當然,熟悉本地調試的各種技術細節,才能更好得進行遠程調試。
對於基本的調試技術(比如設置斷點、單步執行、屏蔽和清楚斷點、監視變量等)不再累述。
2 PowerBuilder7的調試畫板簡介
調試畫板集成了PowerBuilder強大的調試功能,包括以下主要的部分:
1)Breakpoints View:展示所有要調試的對象、事件、代碼行信息、通過它很容易定位到需要調試的代碼或者進行斷點使能和屏蔽等操作。
2)Callstacks View:展示調試的斷點在程序中調用的層次,返回時會按照這個壓棧順序返回。提供了程序執行的宏觀線索。
3)Instances:展示實例化的遠程組件狀態等信息。只適用於遠程調試。
4)Objects In Memory:展示加載到內存的對象列表。通過它可以觀察對象在內存裏的佔用情況(不適用於遠程調試)。
5)Source View:展示代碼。
6)Source Browser:展示應用中所有的對象列表。
7)Source History:展示在Source View中曾經出現過的代碼列表。
8)Variables View::展示所有類型的變量。可以在調試畫板中人爲修改變量值,或者設置在某個變量的值發生改變時中斷程序而觸發調試。
9)Watch View:展示選擇出來的變量值,進行表達式的運算等。
3      本地調試
3.1設置臨時和條件斷點
對於一般的斷點,可在Source View中很容易得設置。如果斷點處在循環體中,可能不期望每次循環都跳到調試畫板,這時候需要設置臨時和條件斷點。斷點在多少次循環後被觸發,屬於臨時觸發;斷點在滿足某種表達式條件後被觸發,屬於條件觸發;在相同的斷點位置可以同時存在臨時和條件兩種觸發機制。
打開對應的斷點編輯彈出窗口(在Breakpoint View和Source View中都能打開),在Occurrence欄目填入一個整數,代表每循環多少次才觸發這個斷點;在Condition欄目填入一個表達式,比如ll_i = 10,這樣,在這個循環中,每次在變量ll_i = 10這個條件滿足時才觸發斷點。
可同時設置臨時和條件觸發,這種情況下必須兩者都滿足才觸發斷點。
當然條件觸發也可以用於不屬於循環性質的代碼段裏面。
3.2設置變量值改變斷點
如果調試特別關心某個變量,關心這個變量的值在哪裏改變了(比如由false變成true,由0變成非0等),這時可以設置變量值改變觸發斷點。方法是在Variables中選擇要調試的變量,右鍵彈出菜單,選擇Break on Change,這樣,每次這個變量的值發生改變,就會觸發斷點,能夠方便觀察哪些代碼對這個變量進行了賦值操作,有利於對這個變量的變化軌跡進行跟蹤。
3.3Just-in-time調試
當按正常模式而不是調試模式運行應用的時候,如果程序運行不正常,甚至報錯,可能需要退出程序,重新打開調試畫板,調試這個異常或者錯誤,比較麻煩;選擇just-in-time模式,就能在遇到需要調試的時候,即時切換到調試模式。
選擇菜單Windows>System Options…在彈出窗口中選中Just In Time Debugging。在按正常模式運行程序時,只要切換到PowerBuilder窗口,就提示是否中斷和調試程序,選擇調試,會進入調試模式;如果出現系統錯誤,調試畫板會自動彈出,讓開發者進行調試,而不必特意選擇調試模式。
4 遠程調試
4.1遠程調試的條件和準備
討論了本地調試的一些技術和技巧後,轉入遠程調試方面。在遠程調試中可以充分利用以上技術技巧。
要進行遠程調試首先要滿足幾個條件:被調試的組件是PowerBuilder部署的nvo(非可視化)類型,Remote Debug(遠程調試)選項是打開的;前者說明這種調試只侷限於PB組件開發範疇,而不是其他類型的Jaguar組件,後者的滿足要進入部署組件的工程對象畫板,打開屬性窗口,在components頁框裏看Supports remote debugging選項是否打開,沒有的話就打開它。
以上的條件滿足之後,在組件腳本里面設置好斷點。打開調試畫板,在PainterBar工具欄按Start Remote Debugging按鈕,而不是通常調試本地應用的Start按鈕,然後填寫連接Jaguar CTS組件服務器的信息,選中要調試的組件。這時候可等待客戶端的程序調用該組件了。
對於斷點的設置,最好先打開組件對象,在需要調試的地方設置上斷點,再進入調試畫板,這樣所設置的斷點已經存在了,而不必再在Source Browser裏面去找。
4.2遠程調試具體方法
運行一個客戶端程序,這個程序在另一個PowerBuilder中運行、或者是一個別的機器上的可執行程序,但都必須訪問所調試Jaguar CTS組件的方法和事件,這樣才能觸發剛纔的遠程調試,當客戶端程序調用Jaguar CTS的組件,並且運行到斷點處(陷入到組件裏面),剛纔調試組件的PowerBuilder會在Windows任務欄中閃爍,提示用戶可進行組件的遠程調試了,切換到遠程調試窗口,就能看到腳本和斷點,調試方法與本地腳本調試基本相同,這時候需要充分利用前面所討論的調試技術。
打開菜單View>Instances,對於Instances View,建議在遠程調試階段始終打開,這樣能方便的切換對不同實例的調試,在Instances View裏能觀察中間層組件實例的三個狀態:running代表這個組件實例在運行;,idle代表實例是空閒的,它的存在只是等待客戶對它的方法的陷入;stopped代表運行中止狀態。三個狀態中一般是看不到running狀態的,因爲當觸發調試的時候,實例是停在斷點處,看到的狀態是stopped,當調用完方法(組件方法陷入完成後),實例狀態轉爲idle,running 狀態由於陷入代碼運行時間非常快,你無法觀察到,除非你設定了某種循環讓組件方法運行時間延長才能觀察到
如果有兩個以上的客戶端陷入到相同的組件中,會出現兩個實例,它們對應相同的包和組件信息,但標號不同,由實例號1、2…標識出,而且它們的狀態可能不同,有的是stopped,有的可能是idle。選擇不同的instance,可以分別調試,儘管不同的實例可能對應相同的組件。
5 結束語      建議調試的時候把源碼中的窗口置頂函數註釋掉,如setposition(topmost!)之類的函數,否則會切換不到調試畫板。
遠程調試比本地調試複雜得多,比如對相同的組件可以陷入多個方法的調用中,每個客戶端的調用所走的位置不同,這時候需要切換不同的實例。
遠程調試選項在一個組件調試成熟之後需要禁止掉,否則,就有可能被客戶端的調試機制所利用,源代碼被別的用戶調試和檢查。
適用於本地調試的Object In Memory和Watch View裏面的表達式
計算不被現在的PowerBuilder遠程調試技術支持。

參考文獻
〔1〕David M. C. Client/Server: A Developer's Guide. Revised Edition. IDG (M&T) Books, 1998.
〔2〕David M. C. Power Builder 6: A Developer's Guide. Revised Edition, .IDG (M&T) Books, 1998.
〔3〕 李志軍, 李飛, 肖永波等編著. 《Sybase組件事物服務器Jaguar技術詳解》.
電子工業出版社, 2000.
〔4〕Sybase Com. Building a Jaguar Component,
〔5〕武高明. PowerBuilder開發Jaguar CTS組件的遠程調試技術. 程序員大本營—數據庫專刊. 2002
〔6〕林穎賢,林大濱. 多層分佈式結構技術在
企業物資管理信息系統中的應用. 軟件世界. 2001

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章