2010-02-11 208 views
1

在調試模式下,powerbuilder(版本10.5)拋出應用程序執行錯誤並終止應用程序,因爲語句在try/catch塊內放置引發的錯誤?PowerBuilder通過try/catch塊內的錯誤在調試模式下崩潰

例如下面的第3行拋出「超出數組邊界」錯誤,應用程序終止。我如何克服這個(處理過的)錯誤並調試其餘的代碼?

try 
// lstr_passed_values = message.powerobjectparm 
ls_symv_no = gstr_symv_passed_values.is_values[1] 
if isnull(ls_symv_no) or ls_symv_no = "" then 
    is_symv_no="%" 
else 
    is_symv_no = ls_symv_no 
    gstr_symv_passed_values.is_values[1]="" 
end if 
catch (throwable err) 
is_symv_no="%" 
end try 
+0

你有沒有試過在訪問它的元素之前檢查數組的長度? – ilitirit 2010-02-11 08:42:34

+0

是的,這可以解決問題,但try/catch塊的用途是什麼。在運行時,代碼行爲正常,但是在調試模式下,它的行爲就像try/catch語句被忽略一樣! – 2010-02-11 08:54:57

+0

經過一番研究,似乎這是已知的問題,我不確定是否存在通用的解決方法(在運行時使用messageboxes之外)。 http://groups.google.co.za/group/sybase.public.powerbuilder.futures.discussion/browse_thread/thread/e2dc716c08de40c1/085ab54268651245?hl=zh-CN&lnk=gst&q=try+catch+debug#085ab54268651245 – ilitirit 2010-02-11 15:11:30

回答

3

苦於調試嗎?

我會說PB調試器的行爲應該是它應該的。如果您試圖真正掌握調試的概念,那麼應該逐行逐行執行代碼。通過給你一個「超出數組邊界」的錯誤,調試器實際上證明了你的代碼中有一個潛在的未處理的異常(這就是你將Try-Catch代碼放在那裏的原因)。

在調試器實際到達該點之前,不會拋出異常。這違背了調試器的目的。你明白我的意思嗎?

現在,如果您想在調試模式下跳過特定的代碼塊,則需要使用「設置下一個語句」。

從下面修改的示例代碼中,設置第1行的斷點。調試器到達斷點後,右鍵單擊「編輯變量」字符串「is_symv_no」。然後移動第14行上的點光標並點擊「設置下一個語句」。這將繞過整個try-catch例程(第2-13行)並允許程序繼續。

1 ls_symv_no = "" 
2 try 
3  // lstr_passed_values = message.powerobjectparm 
4  ls_symv_no = gstr_symv_passed_values.is_values[1] 
5  if isnull(ls_symv_no) or ls_symv_no = "" then 
6   is_symv_no="%" 
7  else 
8   is_symv_no = ls_symv_no 
9   gstr_symv_passed_values.is_values[1]="" 
10  end if 
11 catch (throwable err) 
12  is_symv_no="%" 
13 end try 
14 return 
0

萬一有人絆倒在這個線程 - 如果「忽略」不陪你度過try ... catch塊在調試時,則避免了崩潰,去調試一下...例外在PB調試器中。爲相應的異常類型選擇「繼續」選項。

+0

PB 10.5。 2似乎並未提供此選項。 – 2011-10-26 07:25:25

相關問題