gdb 調試 TuMediaService
github地址
起因
- 首先需要有
armgdb
環境 - 運行
./armgdb ./TuMediaService
進入gdb
模式 b hi3531_trcod_interface.cc:98
打斷點r
運行程序print this->vdec_config_path_
打印關鍵值

在這里我們關注的值已經被修改,由于程序中沒有刻意對這一塊內存進行修改,所以一開始懷疑是不是其他線程改寫的,當把其他線程都禁掉,在單線程的情況下跑,還是存在這個問題.由于這邊是基類的最后一個變量,分析基類和派生類的代碼后,大致定位在這里:

問題可能出現在最后一行的數組,當索引為負數才可能出現向前面內存寫入的情況,而且多處地方給數組內部賦值為 -1 ,和錯誤相符合,但是在所有地方都加了判斷和保護,打印出來也沒有異常,而且

進一步定位是在這里的 for
循環出了問題,執行完 for
循環,值發生了變化,剛開始以為是最后一次產生了問題,但是單步調試下,在 124 次,關注值發生了改變。查看了這個數組中的值是一個結構體,會不會問題出現在這個結構體,最后發現原來是有人更新了這個結構體卻沒有上傳導致,數據結構發生了變化,這個問題還是值得謹記的。以后要避免這類問題,庫和頭文件的上傳和下載盡量使用腳本,不要手動拷貝。