程序跑飛的如何查問題

在下這廂有禮了

最近一直在調試公司的代碼,調的我有點慢,給自己總結一下

我是在FPGA上調試,一個通信交互的工程。

我遇到程序跑飛的無非是三種情況

1. 數組越界:就是數組的大小隻有array[100],但是那你用了array[500],產生越界,越界使用的地址,因爲沒有分配,當程序跑到這塊就會跑飛,(現象是進入了一個SVC_Handler異常軟件中斷,是一個死循環)

解決辦法:找到哪一步產生的越界,然後設置斷點,單步執行,找出越界的位置,查看上下文,看是什麼原因產生,對應修改。

2. 指針使用未初始化:定義了一個指針,未初始化就直接使用,程序跑飛。

解決辦法:u_int32 *p = 0;給賦值0,就可以解決。

3. memset函數,會導致跑飛

但是解決辦法目前沒有找到,因爲我調試的程序這塊的錯誤不是每次發生,是偶然會有,目前還在定位。

4. printf函數調用跑飛

解決辦法:將printf變成xil_printf

 

別人的錯誤:

5.堆棧溢出,即分配的堆棧空間不足

6.頁表映射錯誤

學習調跑飛的經驗:

遇到跑飛莫着急 ,看他是否是必然,找準斷點單步行,判斷越界初始化, 實在不行找谷歌。

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