VxWorks調試備忘錄

1. 系統出錯打印出堆棧時,不一定是打印堆棧附近的代碼報錯了,有可能是前面代碼報錯了,然後隨機延時了一段時間才把堆棧信 

    息打印出來了,需要加在前面代碼中不斷縮小範圍排查;

2. 中斷處理例程裏面儘量不要使用memset去初始化數據結構,否則有可能會導致系統卡死;

3. 中斷處理例程裏面不要使用for循環去初始化數據結構,否則會導致系統卡死;

4. 中斷處理例程裏面不要使用new X(),單參數的new()會調用malloc(),而malloc有可能會進入睡眠,從而造成死鎖;

5. 初始化數組時,使用int msgq_item[4] = { 0 }這樣方式,編譯器可能只初始化了msgq_item[0]等於0,其他幾個成員可能沒有初始

    化,因此有出現異常的風險。需要分別逐個初始化,msgq_item[0] = 0,msgq_item[1] = 0, msgq_item[2] = 0, msgq_item[3]

    = 0,這樣寫比較嚴謹些。

6. 在中斷處理例程裏面打印信息,建議使用logMsg,使用printf打印可能會導致系統卡死。

7. 當出現堆棧錯誤時,將錯誤指向的地址複製到終端命令行上執行,也許會顯示出具體的某個函數+偏移。如果是0地址,那麼肯定

    是代碼裏面出現NULL指針操作了,需要自己加log定位。

8. 編寫代碼時,不要使用goto語句,因爲workbench工具鏈對goto語句支持不太友好,簡單一點的goto語句沒問題,複雜一點的編

    譯會報錯。

9. 命令行終端可以執行“函數名+參數”,有些時候想驗證接口的時候可以通過這種方式驗證結果。

 

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