在下這廂有禮了
最近一直在調試公司的代碼,調的我有點慢,給自己總結一下
我是在FPGA上調試,一個通信交互的工程。
我遇到程序跑飛的無非是三種情況
1. 數組越界:就是數組的大小隻有array[100],但是那你用了array[500],產生越界,越界使用的地址,因爲沒有分配,當程序跑到這塊就會跑飛,(現象是進入了一個SVC_Handler異常軟件中斷,是一個死循環)
解決辦法:找到哪一步產生的越界,然後設置斷點,單步執行,找出越界的位置,查看上下文,看是什麼原因產生,對應修改。
2. 指針使用未初始化:定義了一個指針,未初始化就直接使用,程序跑飛。
解決辦法:u_int32 *p = 0;給賦值0,就可以解決。
3. memset函數,會導致跑飛
但是解決辦法目前沒有找到,因爲我調試的程序這塊的錯誤不是每次發生,是偶然會有,目前還在定位。
4. printf函數調用跑飛
解決辦法:將printf變成xil_printf
別人的錯誤:
5.堆棧溢出,即分配的堆棧空間不足
6.頁表映射錯誤
學習調跑飛的經驗:
遇到跑飛莫着急 ,看他是否是必然,找準斷點單步行,判斷越界初始化, 實在不行找谷歌。