天天看點

踩記憶體問題定位步驟

現象:挂死,程式跑的異常,資料被串改

大緻原因:數組越界,字元串操作越界,棧指針操作越界,操作了釋放掉了的指針,多線程時序對資源保護控制不當,記憶體管理異常,使用了其他地方的記憶體

定位方法:

1. 類似記憶體洩漏的問題,先定界,後定位,通過記憶體proc資訊(meminfo/media-mem)判斷是具體的子產品,記憶體段

2. 減法縮小範圍,裁剪子產品,修改應用程式,找到最小場景

3. 加列印,列印出異常和懷疑的位址

4. gdb+watch 異常位址

5. valgrind+effence

6. 代碼深度檢視

個人認為,踩記憶體最惡心了。要從源頭開始規避

1. 入參一定要做邊界檢查,防止溢出

2. 代碼不要嵌套太深,在多線程多通道的場景下,很容易重複釋放/申請資源

3. 不要定義過多的局部變量,數組,防止棧溢出,核心中棧的大小是8k吧。看情況使用kmalloc

繼續閱讀