基本介紹
- 中文名:棧追蹤
- 外文名:stack trace
- 又稱:堆疊回溯
- 領域:計算機
簡介,語言支持,異常處理,尾調用,堆疊溢出,
簡介
棧跟蹤允許跟蹤被調用的嵌套函式序列- 直到生成堆疊跟蹤的點。。同級調用不會出現在堆疊跟蹤中。
語言支持
包括Java和C#在內的很多程式語言都內置相關支持,可以通過系統調用獲取當前的棧追蹤。C++沒有內置此類功能,不過 C++ 用戶可以通過第三方庫獲取棧追蹤。JavaScript的異常中有stack屬性,包含了拋出處的棧信息。
異常處理
異常處理,是程式語言或計算機硬體里的一種機制,用於處理軟體或信息系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。
各種程式語言在處理異常方面具有非常顯著的不同點(錯誤檢測與異常處理區別在於:錯誤檢測是在正常的程式流中,處理不可預見問題的代碼,例如一個調用操作未能成功結束)。某些程式語言有這樣的函式:當輸入存在非法數據時不能被安全地調用,或者返回值不能與異常進行有效的區別。例如,C語言中的atoi函式(ASCII串到整數的轉換)在輸入非法時可以返回0。在這種情況下編程者需要另外進行錯誤檢測(可能通過某些輔助全局變數如C的errno),或進行輸入檢驗(如通過正則表達式),或者共同使用這兩種方法。
通過異常處理,我們可以對用戶在程式中的非法輸入進行控制和提示,以防程式崩潰。
從進程的視角,硬體中斷相當於可恢復異常,雖然中斷一般與程式流本身無關。
從子程式編程者的視角,異常是很有用的一種機制,用於通知外界該子程式不能正常執行。如輸入的數據無效(例如除數是0),或所需資源不可用(例如檔案丟失)。如果系統沒有異常機制,則編程者需要用返回值來標示發生了哪些錯誤。
尾調用
在計算機學裡,尾調用是指一個函數裡的最後一個動作是返回一個函式的調用結果的情形,即最後一步新調用的返回值直接被當前函式的返回結果。此時,該尾部調用位置被稱為尾位置。尾調用中有一種重要而特殊的情形叫做尾遞歸。經過適當處理,尾遞歸形式的函式的運行效率可以被極大地最佳化。尾調用原則上都可以通過簡化函式調用棧的結構而獲得性能最佳化(稱為“尾調用消除”),但是最佳化尾調用是否方便可行取決於運行環境對此類最佳化的支持程度如何。