windows平臺下vlc編譯之十二:用GDB調試vlc

請移步https://higoge.github.io/,所有下載資料在那個博客都能找到。謝謝。 

--------------------------------------------------------------------



    本着開源的精神,本着能讓大家更好的學習vlc,使用vlc,今天Jeremiah寫一篇重量級的博客,用GDB調試vlc。

 

    很多人嘗試過用GDB調試vlc,但都失敗了,主要是官方博客給出的調試方法不好用,只能在winvlc.c文件中調試,不能調試其他文件。Jeremiah也是經過了很久的研究,終於在身邊一位高手的幫助下,實現了對vlc的調試。在此對身邊這個高手錶示感謝。

 

調試前提:
1) 對編譯vlc有所瞭解,最好是編譯成功過。由於用GDB調試vlc需要重新編譯vlc,所以必須對編譯vlc比較熟悉。本篇以vlc-1.0.5爲例。如不清楚如何編譯vlc的請參考《windows平臺下vlc編譯之十一:vlc-1.0.2的編譯》及Jeremiah自己錄製的編譯vlc視頻。
2) 對GDB有所瞭解,至少應該知道怎麼用。如果不知道,去Google吧,一堆堆的資料。

 

    閒言少敘,進入正題。

       

    1. 執行./bootstrap之前,修改vlc-1.0.5的Makefile.am和Makefile.in文件,去掉以下內容:(直接刪除掉)

# Rebase all those DLLs to speed up loading (need cygwin rebase)
  if rebase -b 0x42 /dev/null >/dev/null 2>&1; then \
    find $(win32_destdir) -type f -name '*.dll' -print | rebase -b 0x70000000 -T -; \
  fi

        

    2. 修改myvlc.sh的CC和CXX變量,加入-g。

CC="gcc -mno-cygwin -g" CXX="g++ -mno-cygwin -g"

 

    3. 執行腳本,修改錯誤,執行make,這些都請參考以前博客。

       

    4. make成功後不要執行make package-win32-base。而是執行以下命令。

make package-win32-base-debug

 

    5. 現在就可以調試了。

cd vlc-1.0.5
gdb vlc

    顯示如下:

 

    6. 設置斷點。

    給vlc設置斷點其實讓Jeremiah頭暈了很長時間,但最後終於搞定了。先打印下看看。輸入l。

    設置斷點可以用b function_name的形式,但vlc裏面重名函數太多,所以此方法不太好用。

    採用另外的方式,b fine_name:line_number的形式,vlc裏面重名的文件名是很少的,所以這樣的方法可以很有效的設置斷點。一開始設置會提示找不到,輸入y讓其記錄就行了。此處舉例設置avcodec.c的211行,OpenDecoder函數,即調試plugins/libavcodec_plugin.dll的代碼。

 

    7. 執行程序,輸入視頻路徑地址。

run d:/video/01.avi

    會執行到libvlc_new之後停住。

      按c繼續執行後會在avcodec.c的OpenDecoder函數停住。   

    通過這樣的方式就可以進行調試了,比如用s或n進行單步調試。

 

    祝各位清明節快樂。

      

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