小林教IDL§10 程序調試I
有些人問怎麼調試程序,那我就把調試這一章提前到前面來講講吧。反正目前基本上初學者不多,最起碼都是入門了,直接跳到這一部分大家不會有太大的閱讀問題。
§10 程序調試
§ 10.1 錯誤的分類
要調試程序,首先需要知道我們究竟遇到了什麼錯誤。不同的錯誤的處理方法不太一樣。
通常,錯誤被分為語法錯誤、運行時錯誤、邏輯錯誤等幾個類型。不過從我自己的實踐經驗來說,我的分類更細一些:
以下描述中提到「過程」一詞的,指代「過程或函數」。
語法錯誤
凡是違反了基本的語法規則的,idl的編譯器無法正確解析的,就是語法錯誤。通常語法錯誤是最容易發現的,語法錯誤通常是在運行前編譯的時候就被發現了,而且語法錯誤也不存在什麼繼續執行的可能,因為idl根本不能理解你寫的。
比如,調用過程漏寫逗號,表達式括弧不匹配,等等。。。。
准語法錯誤
這是我自己新添的術語,用來表達那些符合語法,但是卻忽略了語法的特殊性導致的錯誤。
比如,需要保留商的小數部分時,用了兩個整數相除;直接對兩個來源不同的浮點數進行判斷;用、而不是、進行大小比較;等等。。。。
這類錯誤,編譯通常能過(偶爾也有用錯符號導致編譯器都通不過的),甚至運行時也能通過,但是通常結果不對。當然偶爾瞎貓碰到死耗子也能得出正確的結論……
在大部分書籍中,這樣的准語法錯誤,往往分類到邏輯錯誤中,不過我覺得它們完全可以作為另外一種語法錯誤,因為都是由於編程者對語法學習的錯誤引起的。
運行時錯誤
指那些能運行,但是運行中,報告出錯無法繼續運行。這一類錯誤,通常都是和表達式的取值有關,不過需要注意的是,有很多時候和數組的大小、維度也有關,不僅僅是值。
例如,把一個數除以0,下標越界等等。
外部錯誤
這是我從運行時錯誤中單獨抽取出來的一類錯誤,特指那些由於程序之外的因素引起的錯誤。我們處理數據,不可能只在程序內部,都需要進行文件操作,甚至外部設備操作,由這些引起的錯誤就是外部錯誤。
例如,要打開的文件不存在,要寫入的文件的目錄不存在或者許可權不對,fits文件損壞,讀文本文件時指定了錯誤的編碼,設定了錯誤的讀出列,等等
邏輯錯誤
邏輯錯誤是編程中的最大錯誤,也是我們實際上調試的主要目標。不過我一般把邏輯錯誤再分解為普通的邏輯錯誤,和物理意義錯誤。
普通的邏輯錯誤,就是傳統意義上的邏輯錯誤。邏輯錯誤的一大特徵就是程序通常可以正常運行結束,但是得不到我們想要的結果。
物理意義錯誤
簡單來說呢,這種錯誤就是寫的程序表達的物理模型、物理意義,和設想的不同。當然這邊不討論物理模型本身對不對的問題,那不是編程的事情……
認清了不同類型的錯誤,後面我們就可以逐個來解決。不過話說回來,物理意義錯誤,基本上我沒啥例子可以舉的。。。只能是大家在各個領域工作中去接觸。
歡迎大家提出建議和意見,指出錯誤。大家請直接留言,或者給我微信賬號發消息(私信或者群聊),謝謝。天文圈的圈友們可以直接在天文圈或者IDL群等找到我。
最後,版權聲明:本人保留本書的版權,歡迎收藏、發送,但是未經本人許可,不得轉載。


TAG:小林在線 |
※S7-PLCSIM模擬軟體在線程序調試
※GDB調試CVE-2018-5711 PHP-GD拒絕服務漏洞
※DeepLab v2及調試過程
※Stanford NLP 解讀 ACL 2018 論文——用於調試 NLP 模型的語義等價對立規則
※用GDB調試PHP及反序列化小記
※微軟PIX全面支持AMD顯卡,輕鬆調試和分析Direct3D 12圖形渲染性能
※如何構造自己的iOS內核調試器?這裡有份MOSEC 2018劇透
※2020見!Intel Xe獨顯晶元已完工:正全力調試軟體驅動
※挖掘IntelliJ IDEA的調試功能
※macOS內核調試介紹
※WINDOWS系統開機慢的優化調試方法
※VS2017的一些調試方法技巧
※【網路研討會】介紹PVRStudio——首款支持在移動平台上進行GPU調試的IDE
※是德科技推出首款 DDR5 和 LPDDR5 存儲器協議調試和驗證解決方案
※HMD確認諾基亞9 PureView配置五攝:攝像頭還在調試
※Python 調試器入門
※UltraSoC嵌入式分析技術與Imperas虛擬平台聯手助力多核開發及調試
※IntelliJ遠程調試詳解
※Eclipse Debug 調試
※Vivo NEX手機已完成5G網路調試,5G信號的標識就長這樣?