教案應(yīng)用的調(diào)試和開發(fā)PowerBuilder市公開課獲獎?wù)n件_第1頁
教案應(yīng)用的調(diào)試和開發(fā)PowerBuilder市公開課獲獎?wù)n件_第2頁
教案應(yīng)用的調(diào)試和開發(fā)PowerBuilder市公開課獲獎?wù)n件_第3頁
教案應(yīng)用的調(diào)試和開發(fā)PowerBuilder市公開課獲獎?wù)n件_第4頁
教案應(yīng)用的調(diào)試和開發(fā)PowerBuilder市公開課獲獎?wù)n件_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第11章 應(yīng)用調(diào)試和發(fā)行 相應(yīng)用程序開發(fā)來說,錯誤再所難免,調(diào)試環(huán)節(jié)必不可少。調(diào)試目的是努力發(fā)覺并更正錯誤,使程序能更加好地運(yùn)營。 11.1 應(yīng)用程序調(diào)試 PowerBuilder提供了兩種運(yùn)營應(yīng)用程序方式:調(diào)試方式(Debug Mode)和常規(guī)方式(Regular Mode)。在調(diào)試方式中,可在腳本和函數(shù)中插入斷點(diǎn)或進(jìn)行代碼單步執(zhí)行,并且能夠顯示執(zhí)行過程中變量值,以便找出邏輯錯誤。在常規(guī)方式中,應(yīng)用程序響應(yīng)用戶交互操作直到用戶中斷運(yùn)營或發(fā)生錯誤為止。這也是運(yùn)營完整應(yīng)用程序方式。 調(diào)試應(yīng)用程序普通驟下列:1打開調(diào)試(Debug)窗口;2在應(yīng)用程序中設(shè)置斷點(diǎn)(Breakpoint);3在調(diào)試狀態(tài)

2、下運(yùn)營應(yīng)用程序;4當(dāng)執(zhí)行到斷點(diǎn)處掛起時,查看或改變相關(guān)變量值;5如有必要,逐行單步運(yùn)營代碼;6依據(jù)需要,在運(yùn)營過程中增添或修改斷點(diǎn);7當(dāng)發(fā)覺問題時,糾正錯誤代碼。結(jié)束放映第一頁上一頁下一頁最后一頁第1頁第1頁11.1.1 打開調(diào)試窗口 單擊PowerBar工具欄中Debug圖標(biāo)或Select Debug圖標(biāo),進(jìn)入Debug窗口,以下圖所表示。 結(jié)束放映第一頁上一頁下一頁最后一頁第2頁第2頁11.1.1 打開調(diào)試窗口下面簡介圖中圖標(biāo)含義 。 Start圖標(biāo):開始執(zhí)行應(yīng)用。單擊該圖標(biāo)按鈕可按調(diào)試方式執(zhí)行當(dāng)前應(yīng)用。 Start Remote圖標(biāo):開始執(zhí)行遠(yuǎn)程應(yīng)用。用于調(diào)試服務(wù)器端代碼。 Stop D

3、ebugging圖標(biāo):停止調(diào)試當(dāng)前應(yīng)用程序。 Continue圖標(biāo):繼續(xù)執(zhí)行。當(dāng)程序碰到斷點(diǎn)暫停執(zhí)行時,單擊該按鈕即可使程序繼續(xù)執(zhí)行到下一個斷點(diǎn)。 Step In圖標(biāo):單步跟蹤至用戶自定義函數(shù)內(nèi)部,以檢查函數(shù)當(dāng)初狀態(tài)。 Step Over圖標(biāo):單步跟蹤并跨越函數(shù)。該按鈕只把函數(shù)當(dāng)作一條語句來看待,并不跟蹤至函數(shù)內(nèi)部。 Step Out圖標(biāo):從函數(shù)內(nèi)部一次執(zhí)行完。當(dāng)已經(jīng)跟蹤到函數(shù)內(nèi)部又不希望繼續(xù)單步跟蹤時,可利用該按鈕繼續(xù)執(zhí)行直至函數(shù)返回。 Run To Cursor圖標(biāo):執(zhí)行至指定光標(biāo)處??衫迷摪粹o指定位置,始終執(zhí)行至當(dāng)前光標(biāo)所在語句。 Set Next Statement圖標(biāo):設(shè)置下一條要

4、執(zhí)行語句。該按鈕使從用戶指定位置執(zhí)行。 Select Script圖標(biāo):選擇要調(diào)試某一對象上某個事件程序或用戶自定義函數(shù)中程序。結(jié)束放映第一頁上一頁下一頁最后一頁第3頁第3頁11.1.1 打開調(diào)試窗口Edit Stop圖標(biāo):編輯斷點(diǎn)。能夠查看所有斷點(diǎn),設(shè)置暫時斷點(diǎn)、條件斷點(diǎn),也能夠清除斷點(diǎn)。 Add Watch圖標(biāo):向Watch視圖中添加變量。 Remove Watch圖標(biāo):從Watch視圖中刪除變量。 Close圖標(biāo):關(guān)閉Debug畫板。在Debug窗口中包括了幾種視圖和標(biāo)簽,用來顯示程序或調(diào)試期間狀態(tài)信息。它們是: Source視圖:顯示用戶選中事件腳本; Source Browser標(biāo)簽

5、視圖:將當(dāng)前應(yīng)用程序包括所有對象以樹形結(jié)構(gòu)顯示; Source History標(biāo)簽視圖:在Source視圖中已經(jīng)顯示過程序列表; Local標(biāo)簽視圖:顯示當(dāng)前執(zhí)行狀態(tài)下局部變量值; Global標(biāo)簽視圖:顯示當(dāng)前執(zhí)行狀態(tài)下全局變量值; Instance標(biāo)簽視圖:顯示當(dāng)前執(zhí)行狀態(tài)下實(shí)例變量值; Parent標(biāo)簽視圖:顯示當(dāng)前執(zhí)行狀態(tài)下父對象屬性值; Shared標(biāo)簽視圖:顯示當(dāng)前執(zhí)行狀態(tài)下共享變量值; 結(jié)束放映第一頁上一頁下一頁最后一頁第4頁第4頁11.1.1 打開調(diào)試窗口在Debug窗口中包括了幾種視圖和標(biāo)簽,用來顯示程序或調(diào)試期間狀態(tài)信息。它們是: Object In Memory標(biāo)簽視圖:

6、當(dāng)前內(nèi)存中對象列表; Call Stack標(biāo)簽視圖:執(zhí)行至斷點(diǎn)處被調(diào)用函數(shù)列表,并給出被調(diào)函數(shù)所在程序名和行號; Breakpoints標(biāo)簽視圖:批示斷點(diǎn)激活是否列表; Watch標(biāo)簽視圖:在應(yīng)用執(zhí)行過程中,已經(jīng)觀測過程序列表; Variable視圖:在范圍內(nèi)所有變量列表。 11.1.2 設(shè)置斷點(diǎn)在Debug窗口中斷點(diǎn)分為兩種:普通斷點(diǎn)和特殊斷點(diǎn)。普通斷點(diǎn)是為了中斷程序正常執(zhí)行所設(shè)置位置;特殊斷點(diǎn)則是依據(jù)指定條件來決定是否中斷程序正常執(zhí)行,并進(jìn)入調(diào)試狀態(tài)。1普通斷點(diǎn)設(shè)置用戶可在程序或函數(shù)內(nèi)設(shè)置斷點(diǎn)。當(dāng)關(guān)閉Debug窗口時,用戶設(shè)置斷點(diǎn)將寫入PowerBuilder初始化文獻(xiàn)PowerBuild

7、er.ini中,用戶再次打開Debug窗口時恢復(fù)所設(shè)置斷點(diǎn)。其設(shè)置環(huán)節(jié)下列: 結(jié)束放映第一頁上一頁下一頁最后一頁第5頁第5頁11.1.2 設(shè)置斷點(diǎn)1普通斷點(diǎn)設(shè)置(1)在Source視圖中顯示程序,并把光標(biāo)置于欲設(shè)置斷點(diǎn)位置;(2)雙擊此行或從右擊彈出菜單中選擇Insert Breakpoint。PowerBuilder設(shè)置斷點(diǎn)以紅色圓點(diǎn)顯示在行開頭。如所選行不包括可執(zhí)行代碼,PowerBuilder將在最近可執(zhí)行代碼開始處設(shè)置斷點(diǎn)。2特殊斷點(diǎn)設(shè)置特殊斷點(diǎn)又分為三類:當(dāng)循環(huán)執(zhí)行指定次數(shù)而觸發(fā)暫時斷點(diǎn);當(dāng)指定表示式為真時而觸發(fā)條件斷點(diǎn);當(dāng)變量值發(fā)生改變而觸發(fā)斷點(diǎn)。特殊斷點(diǎn)可用Edit Breakp

8、oints對話框來設(shè)置。 Edit Breakpoints對話框通過下列四種方式打開。 在Breakpoints視圖中,雙擊欲設(shè)置斷點(diǎn)行; 在Source、Variables、Watch、Breakpoints視圖中,單擊鼠標(biāo)右鍵,從彈出菜單中選Breakpoints項(xiàng); 選擇菜單欄Edit中Breakpoints項(xiàng); 單擊工具條Edit Stop圖標(biāo) 。 下列頁圖所表示。當(dāng)紅色圓點(diǎn)為空心時,表示該斷點(diǎn)無效;當(dāng)紅色圓點(diǎn)為實(shí)心時,表示該斷點(diǎn)有效。單擊圓點(diǎn)可在兩個狀態(tài)之間轉(zhuǎn)換。 結(jié)束放映第一頁上一頁下一頁最后一頁第6頁第6頁11.1.2 設(shè)置斷點(diǎn)2特殊斷點(diǎn)設(shè)置結(jié)束放映第一頁上一頁下一頁最后一頁第7

9、頁第7頁11.1.2 設(shè)置斷點(diǎn) 2特殊斷點(diǎn)設(shè)置 New:設(shè)置新斷點(diǎn); Clear:清除光標(biāo)所在行斷點(diǎn); Clear All:清除所有斷點(diǎn)。下列欄目用以設(shè)置暫時斷點(diǎn)和條件斷點(diǎn): Location:輸入斷點(diǎn)位置; Occurrence:暫時斷點(diǎn)循環(huán)次數(shù)(Integer型);單選此項(xiàng)可設(shè)暫時斷點(diǎn); Condition:條件斷點(diǎn)條件表示式;單選此項(xiàng)可設(shè)條件斷點(diǎn); Occurrence和Condition:同時選擇可設(shè)暫時條件斷點(diǎn)。 11.1.3 在調(diào)試狀態(tài)下運(yùn)營應(yīng)用程序用戶設(shè)置了斷點(diǎn)以后,就能夠在調(diào)試狀態(tài)下運(yùn)營應(yīng)用程序。當(dāng)應(yīng)用程序碰到斷點(diǎn)時,就會終止程序運(yùn)營,等待用戶檢查。檢查完應(yīng)用后,用戶能夠單步跟

10、蹤直至碰到下一個斷點(diǎn);也能夠停止跟蹤運(yùn)營,以便執(zhí)行新調(diào)試或退出Debug窗口。 1開始運(yùn)營單擊工具欄上Start圖標(biāo),應(yīng)用程序開始執(zhí)行,直至碰到第一個斷點(diǎn)停止,并用黃色箭頭指向下一條將被執(zhí)行行。此時用戶可在窗口各視圖中查看應(yīng)用變量和狀態(tài)信息。 結(jié)束放映第一頁上一頁下一頁最后一頁第8頁第8頁11.1.3 在調(diào)試狀態(tài)下運(yùn)營應(yīng)用程序2繼續(xù)運(yùn)營單擊工具欄上Continue圖標(biāo),調(diào)試程序?qū)狞S色箭頭處開始繼續(xù)運(yùn)營,直至碰到下一個斷點(diǎn)或應(yīng)用正常結(jié)束。3終止運(yùn)營選擇菜單欄Debug中Stop菜單項(xiàng)。4查看變量Variables視圖包括Local、Global、Instance、Parent和Shared變量

11、類型標(biāo)簽頁,用戶能夠很以便地在各種變量間進(jìn)行切換。各變量類型含義下列: Local:當(dāng)前程序或函數(shù)局部變量; Global:所有應(yīng)用定義全局變量和所有打開對象屬性; Instance:當(dāng)前對象實(shí)例變量屬性和當(dāng)前對象定義實(shí)例變量值; Parent:當(dāng)前實(shí)例祖先屬性; Shared:已打開對象以及與之相關(guān)共享變量。在Variables視圖中,可改變變量值。但枚舉類型變量值不可改變。改變辦法是:右擊Variables視圖中相應(yīng)變量,從彈出菜單中單擊Edit Variables,則顯示Modify Variable對話框。 Current Value欄顯示了變量原值,用戶可在New Value欄輸入變

12、量新值,輸入完畢單擊OK按鈕即可。 結(jié)束放映第一頁上一頁下一頁最后一頁第9頁第9頁11.1.3 在調(diào)試狀態(tài)下運(yùn)營應(yīng)用程序在Variables視圖中,也能夠查看表示式值,但首先應(yīng)將表示式添加到Watch視圖中。辦法是在Watch視圖空白處單擊鼠標(biāo)右鍵,從彈出菜單中選擇Insert項(xiàng),顯示New Expression對話框。在Expression欄輸入欲查看表示式即可。 5單步跟蹤單步跟蹤有下列幾種方式: 單步跟蹤至函數(shù)內(nèi)部(Step In)和單步跟蹤并跨越函數(shù)(Step Over)用戶在跟蹤應(yīng)用時,既能夠單步跟蹤到函數(shù)內(nèi)部,也能夠單步跟蹤并跨越函數(shù)。假如此程序不包括函數(shù)調(diào)用,兩者效果相同。單擊工

13、具欄上Step In圖標(biāo)或選擇Debug菜單中Step In菜單項(xiàng)將執(zhí)行單步跟蹤至函數(shù)內(nèi)部。單擊工具欄上Step Over圖標(biāo)或選擇Debug菜單中Step Over菜單項(xiàng)將執(zhí)行單步跟蹤并跨越函數(shù)。 從函數(shù)內(nèi)部一次執(zhí)行完(Step Out)如已經(jīng)跟蹤到函數(shù)內(nèi)部而又不想繼續(xù)單步跟蹤,可用Step Out繼續(xù)執(zhí)行直至函數(shù)返回。單擊工具欄上Step Out圖標(biāo)或選擇Debug菜單中Step Out菜單項(xiàng)將從函數(shù)內(nèi)部一次執(zhí)行完。結(jié)束放映第一頁上一頁下一頁最后一頁第10頁第10頁11.1.3 在調(diào)試狀態(tài)下運(yùn)營應(yīng)用程序 執(zhí)行至指定光標(biāo)處(Run To Cursor)用戶可用這種方式跳過一段不感興趣程序段或

14、跳至指定斷點(diǎn)處。選擇下一次欲單步跟蹤程序行,單擊工具欄上Run To Cursor圖標(biāo)或選擇Debug菜單中Run To Cursor菜單項(xiàng)將運(yùn)營至指定行。 設(shè)置下一位置(Set Next Statement)用戶可使用Set Next Statement來繞過包括錯誤代碼或用指定變量值來測試部分應(yīng)用。程序?qū)挠脩糁付ü鈽?biāo)處繼續(xù)執(zhí)行。選擇欲繼續(xù)執(zhí)行行,單擊工具欄上Set Next Statement圖標(biāo)或選擇Debug菜單中Set Next Statement菜單項(xiàng)將運(yùn)營至指定行。繼續(xù)執(zhí)行,可選擇Continue、Step In、Step Over之一。 6一次性跟蹤使用用戶在常規(guī)模式下運(yùn)營程

15、序并發(fā)覺錯誤時,普通做法是中斷程序運(yùn)營,也能夠通過使用一次性跟蹤(Just-in-time Debug)在不中斷應(yīng)用前提下切換到跟蹤模式。 首先進(jìn)行一次性跟蹤設(shè)置:從Tool菜單中選擇System Options菜單項(xiàng),顯示System Options窗口。從中選中Just-in-time Debugging復(fù)選框,單擊OK按鈕即可。 結(jié)束放映第一頁上一頁下一頁最后一頁第11頁第11頁11.1.3 在調(diào)試狀態(tài)下運(yùn)營應(yīng)用程序在常規(guī)模式下運(yùn)營應(yīng)用程序:單擊工具欄中Run圖標(biāo),應(yīng)用程序開始正常運(yùn)營。假如發(fā)生系統(tǒng)錯誤,Debug窗口將自動打開,顯示錯誤信息。在Debug窗口Source視圖中打開程序并

16、進(jìn)行調(diào)試。11.2 應(yīng)用程序運(yùn)營當(dāng)應(yīng)用程序調(diào)試通過之后,就能夠在常規(guī)狀態(tài)下運(yùn)營了。單擊工具欄中Run圖標(biāo),應(yīng)用程序開始正常運(yùn)營。 11.3 生成可執(zhí)行文獻(xiàn)和其它軟件同樣,用PowerBuilder開發(fā)應(yīng)用程序也需通過編譯才干生成可執(zhí)行應(yīng)用程序。PowerBuilder提供編譯工具能夠?qū)?yīng)用程序編譯成直接在操作系統(tǒng)下運(yùn)營應(yīng)用程序。11.3.1 創(chuàng)建工程及編譯使用Project中Application Wizard建立工程基本環(huán)節(jié)下列:1在PowerBar工具欄上單擊New圖標(biāo),選擇Project標(biāo)簽頁中Application Wizard向?qū)А?結(jié)束放映第一頁上一頁下一頁最后一頁第12頁第12頁

17、11.3.1 創(chuàng)建工程及編譯2在About the Application Project Wizard對話框中單擊Next按鈕。3在Specify Destination Library對話框中選擇存儲工程應(yīng)用庫,單擊Next按鈕。4在Specify Project Object對話框中命名工程,單擊Next按鈕。5在Specify Executable and Resource Files對話框中給可執(zhí)行文獻(xiàn)命名,選擇資源文獻(xiàn),單擊Next按鈕。6在Specify Build Options對話框中選擇編譯類型:Full Build(完全編譯)和Incremental Build(只重新編

18、譯新增部分)。Prompt for Overwrite選中,表示當(dāng)覆蓋文獻(xiàn)時出現(xiàn)提醒,單擊Next按鈕。7在Generate Machine Code對話框中選擇應(yīng)用程序是否生成機(jī)器代碼,單擊Next按鈕。 8在Specify Dynamic Library Options對話框中選擇擬定應(yīng)用程序是否生成動態(tài)庫,單擊Next按鈕。9在Specify Version Infoumation對話框中填寫版本信息,單擊Next按鈕。 10在Ready to Create Application對話框中單擊Finish按鈕。出現(xiàn)新界面,在此界面中還能夠?qū)η懊嬖O(shè)置進(jìn)行修改。結(jié)束放映第一頁上一頁下一頁最后

19、一頁第13頁第13頁11.3.1 創(chuàng)建工程及編譯11單擊project畫板上Deploy圖標(biāo)即可進(jìn)行編譯應(yīng)用程序,生成EXE文獻(xiàn)。11.3.2 應(yīng)用系統(tǒng) 用PowerBuilder開發(fā)可執(zhí)行應(yīng)用系統(tǒng)普通包括下列三個部分:可執(zhí)行文獻(xiàn)(即EXE文獻(xiàn))、動態(tài)庫文獻(xiàn)(PowerBuilderD或DLL文獻(xiàn))、外部資源文獻(xiàn)(如位圖、圖標(biāo)等)。1EXE文獻(xiàn)對任何PowerBuilder應(yīng)用來說,都至少需要一個編譯好EXE文獻(xiàn)。這個文獻(xiàn)包括了最基本、能使應(yīng)用系統(tǒng)在各種操作系統(tǒng)下執(zhí)行程序代碼,用戶能夠通過雙擊EXE文獻(xiàn)圖標(biāo)來執(zhí)行應(yīng)用程序。2PowerBuilderD文獻(xiàn)或DLL文獻(xiàn)為確保EXE文獻(xiàn)能在普通機(jī)器

20、上運(yùn)營,應(yīng)使EXE文獻(xiàn)小于1.2MB。假如有也許超出1.2MB,編譯時可利用PowerBuilder動態(tài)庫技術(shù),把應(yīng)用分為幾部分,使應(yīng)用中對象分別存儲在多個庫文獻(xiàn)中。程序會在動態(tài)庫中搜索并動態(tài)調(diào)用這些庫中對象。動態(tài)庫含有可使應(yīng)用模塊化、易維護(hù)、可重用好、靈活高效長處。因此,在組織應(yīng)用系統(tǒng)時,應(yīng)當(dāng)充足利用動態(tài)庫技術(shù),把在整個應(yīng)用中利用率較低對象,或也許被其它應(yīng)用調(diào)用組件作為動態(tài)對象放在動態(tài)庫中,在可執(zhí)行文獻(xiàn)中只放少許、使用頻率最高對象。結(jié)束放映第一頁上一頁下一頁最后一頁第14頁第14頁11.3.2 應(yīng)用系統(tǒng)3資源除了如窗口、菜單等PowerBuilder對象之外,應(yīng)用在執(zhí)行時還也許用到其它資源,

21、如位圖和圖標(biāo)等。這些被引用資源同PowerBuilder對象同樣,也應(yīng)當(dāng)作為可執(zhí)行應(yīng)用一部分編譯。資源發(fā)行辦法有兩種:第一,與可執(zhí)行文獻(xiàn)一起發(fā)行。只要將資源與應(yīng)用一起發(fā)行,并確保安裝在可搜索路徑中,程序執(zhí)行時會搜索這些資源。第二,利用資源文獻(xiàn)(PowerBuilderR文獻(xiàn))。資源文獻(xiàn)是應(yīng)用中所需資源清單,在資源文獻(xiàn)中列出了這些資源所在路徑及文獻(xiàn)名。PowerBuilder建立可執(zhí)行文獻(xiàn)或動態(tài)庫時可依據(jù)資源文獻(xiàn)中列出資源,將它們連入可執(zhí)行文獻(xiàn)或動態(tài)庫中。這種辦法適合建立一些大型應(yīng)用。11.4 應(yīng)用程序發(fā)行發(fā)行PowerBuilder應(yīng)用程序時,只在用戶機(jī)器上安裝應(yīng)用程序可執(zhí)行文獻(xiàn)(包括生成應(yīng)用程序時生成動態(tài)庫)是遠(yuǎn)遠(yuǎn)不夠。為確保正常運(yùn)營,還應(yīng)向用戶發(fā)行PowerBuilder運(yùn)營時所需動態(tài)鏈接庫,安裝數(shù)據(jù)庫接口,配備ODBC數(shù)據(jù)源,安裝網(wǎng)絡(luò)驅(qū)動程序,以及必要時修改操作系統(tǒng)配備等。 結(jié)束放映第一頁上一頁下一頁最后一頁第15頁第15頁11.4.1 PowerBuilder運(yùn)營時庫PowerBuilder開發(fā)環(huán)境中包含一組脫離開發(fā)環(huán)境運(yùn)行PowerBuilder應(yīng)用程序所需運(yùn)行時庫,稱做PowerBuilder Dev

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論